我在UITextView中集成的应用程序中有以下文字
使用此应用程序即表示您同意我们的用户协议和隐私政策。
我想要达到的目标是为点击的两个粗体部分识别单独的点击,这些部分将打开SafariViewController。我需要的是链接识别,我可以放置文本
使用此应用程序即表示您同意我们的用户协议(链接:@“https://google.com/agreement”)和隐私政策(链接:@“{{ 3}}“)。
我希望此文本显示为上面的文本,并且单击textView即可打开这些“隐藏”链接。这可能吗?我找到了一个解决方案,其中一个人创建N个UILabel(每个标签是1个字符),在下划线文本上附加手势识别器。我讨厌这个解决方案,因为当iOS为你提供支持链接文本的TextView时,它更像是一个黑客而不是解决方案。
编辑:
在下面提出一些建议并进行一些调整后找到了一个有效的解决方案...
您需要创建UITextView,您将在其中创建链接文本
为普通文本和标记为链接的文本
创建文本属性NSDictionary *orangeTextAttributes = @{NSForegroundColorAttributeName: [UIColor orangeColor], NSFontAttributeName: [UIFont systemFontOfSize:14 weight:UIFontWeightThin], NSUnderlineStyleAttributeName: @(NSUnderlineStyleSingle)};
NSDictionary *normalTextAttributes = @{NSForegroundColorAttributeName: [UIColor blackColor], NSFontAttributeName: [UIFont systemFontOfSize:14 weight:UIFontWeightThin]};
将该属性用于文本
NSMutableAttributedString *labelAttributedText = [[NSMutableAttributedString alloc] initWithString:@"By using this application, you agree to Google's User Agreement and Privacy Policy." attributes:normalTextAttributes];
[self addLink:@"https://google.com/terms-of-services" toString:@"User Agreement" ofAttributedString:labelAttributedText];
[self addLink:@"https://google.com/privacy" toString:@"Privacy Policy" ofAttributedString:labelAttributedText];
self.termsAndPolicyTextView.linkTextAttributes = orangeTextAttributes;
self.termsAndPolicyTextView.attributedText = labelAttributedText;
添加方法以附加指向TextView文本的链接
- (void)addLink:(NSString *)urlString toString:(NSString *)substringToBeLinked ofAttributedString:(NSMutableAttributedString *)entireAttributedString {
NSRange substringRange = [[entireAttributedString string] rangeOfString:substringToBeLinked];
if (substringRange.location != NSNotFound) {
[entireAttributedString addAttribute:NSLinkAttributeName value:urlString range:substringRange];
}
}
将委托攻击到您的文本视图,并处理已注册链接点击的回调
- (BOOL)textView:(UITextView *)textView shouldInteractWithURL:(NSURL *)URL inRange:(NSRange)characterRange interaction:(UITextItemInteraction)interaction {
//This is where you open your link in browser for example
return NO;
}
答案 0 :(得分:0)
也许,你应该使用UITextView。如果您使用UITextView,您将能够执行以下操作:
@IBOutlet weak var textView: UITextView!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
let string = "Google - Yahoo"
let linkString = NSMutableAttributedString(string: string)
linkString.addAttribute(NSLinkAttributeName, value: NSURL(string: "https://www.google.com")!, range: NSMakeRange(0, 5))
linkString.addAttribute(NSFontAttributeName, value: UIFont(name: "HelveticaNeue", size: 25.0)!, range: NSMakeRange(0, 5))
linkString.addAttribute(NSLinkAttributeName, value: NSURL(string: "https://www.yahoo.com")!, range: NSMakeRange(9, string.characters.count))
linkString.addAttribute(NSFontAttributeName, value: UIFont(name: "HelveticaNeue", size: 25.0)!, range: NSMakeRange(9, string.characters.count))
textView.attributedText = linkString
textView.delegate = self
textView.selectable = true
textView.userInteractionEnabled = true
}
另外,请记住实现委托方法:
func textViewShouldBeginEditing(textView: UITextView) -> Bool {
return false
}
func textView(textView: UITextView, shouldInteractWithURL URL: NSURL, inRange characterRange: NSRange) -> Bool {
return true
}
您需要注意的最后一件事是IB上的UITextView配置:
只需在故事板中选择UITextView,然后转到"显示属性检查器"并选择可选择和链接。确保未选中“可编辑”。