2017-10-09 38 views
0

我试图让一个TextView有像这样的一些测试:iOS的SWIFT:TextView的链接到其他视图

信用评级机构等enim存有。 Nullam rhoncus euismod nisi在convallis。 Etiam accumsan libero odio,eget malesuada ligula bibendum venenatis。

其中的链接带给你的其他的ViewController ...我想我应该用属性文本来做到这一点,但我真想不通怎么...

其他的解决办法是使用标签包围的按钮,但它不是优雅的...

有帮助吗?

+0

看到此HTTPS:/ /stackoverflow.com/questions/995219/how-to-make-uitextview-detect-links-for-website-mail-and-phone-number –

+0

nop,与我试图访问网络的链接.. 。但只是到另一个视图 –

+0

使用'shouldInteractWith'并处理您的链接 –

回答

1

使用UITextView委托方法

textView(_:shouldInteractWith:in:interaction:)

您可以在此方法中,你需要理清的深层链接到另一个视图 - 控制检查URL。此外,对于这种情况,请从此方法返回false。

如果还可以从应用程序外部打开URLS,则可能需要查看iOS中提供的Deeplink解决方案以获得更好的管理,并且还会为用户提供深入链接功能。

+0

的检测,以及如何添加从uistoryboard的链接? –

+0

@TheMiotz:链接可以添加到属性字符串中。看[这里](https://stackoverflow.com/questions/21629784/how-to-make-a-clickable-link-in-an-nsattributedstring-for-a)。但我不知道如何在故事板/笔尖中完成。 –

0

您可以检查URL被按下,并出示您的视图控制器

func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool 
{ 
    if let urlStr = request.url?.absoluteString 
    { 
     if (urlStr.lowercased().contains("yourURL")) 
     { 
      //go to your view controller 
      return true 
     } 
    } 
    return false 
} 
0

您可以使用现有的有源标签框架的工作,我在github上,因为我用的是同为实现我的目标,这是工作细
https://github.com/optonaut/ActiveLabel.swift

func setupAgreement() { 

     let customType1 = ActiveType.custom(pattern: "\\sterms of service\\b") //Looks for "are" 
     let customType2 = ActiveType.custom(pattern: "\\sprivacy policy\\b") //Looks for "it" 
     let customType3 = ActiveType.custom(pattern: "\\scookie use\\b") //Looks for "supports" 

     userAgreementLabel.enabledTypes.append(customType1) 
     userAgreementLabel.enabledTypes.append(customType2) 
     userAgreementLabel.enabledTypes.append(customType3) 

     userAgreementLabel.customize { (label) in 

      label.text = "UserAgreement".localized 
      label.numberOfLines = 0 
      label.lineSpacing = 4 
      label.textColor = UIColor(red: 0/255, green: 0/255, blue: 0/255, alpha: 1) 

      //Custom types 
      label.customColor[customType1] = Constant.AppColor.blueColor 
      label.customSelectedColor[customType1] = Constant.AppColor.blueColor 
      label.customColor[customType2] = Constant.AppColor.blueColor 
      label.customSelectedColor[customType2] = Constant.AppColor.blueColor 
      label.customColor[customType3] = Constant.AppColor.blueColor 
      label.customSelectedColor[customType3] = Constant.AppColor.blueColor 

      label.configureLinkAttribute = { (type, attributes, isSelected) in 
       var atts = attributes 
       switch type { 
       case customType1: 
        atts[NSFontAttributeName] = UIFont(name: self.userAgreementLabel.font.fontName, size: 15.0) 
       case customType2: 
        atts[NSFontAttributeName] = UIFont(name: self.userAgreementLabel.font.fontName, size: 15.0) 
       case customType3: 
        atts[NSFontAttributeName] = UIFont(name: self.userAgreementLabel.font.fontName, size: 15.0) 
       default:() 
       } 

       return atts 
      } 

      label.handleCustomTap(for: customType1, handler: { (value) in 
       self.load(cms: .terms) 
      }) 
      label.handleCustomTap(for: customType2, handler: { (value) in 
       self.load(cms: .privacy) 
      }) 
      label.handleCustomTap(for: customType3, handler: { (value) in 
       self.load(cms: .cookie) 
      }) 

     } 
    } 

    // func navigateToWebView() { 
    //  let controller = self.storyboard?.instantiateViewController(withIdentifier: Constant.StoryBoardIdentifier.webViewController) 
    //  self.present(controller!, animated: true, completion: nil) 
    //  
    // } 
    func load(cms: CMS) -> Void { 
     let cmsController: CMSViewController = UIStoryboard(storyboard: .setting).initVC() 
     cmsController.cms = cms 
     show(cmsController, sender: cmsController.classForCoder) 
    }