在我的应用程序中,我正在从服务器上的文本文件中读取。当我得到这个NSString我想基本上使它的不同部分可点击,这样如果他们点击某个句子,那么它将打开一个对话框。我该怎么做?
我已经阅读了有关使用UITapGestureRecognizer的内容,但我不知道如何使用它来识别一串文字,而不是一次只识别一个单词。
我也研究过NSMutableAttributedStrings,但我只是找不到我需要知道如何做到这一点。
任何帮助都将不胜感激。
答案 0 :(得分:0)
您可以使用NSAttributedString
插入带有自定义网址方案的链接。然后,当您检测到链接已被按下时,请检查网址方案,如果它是您的,请在该方法中执行您想要执行的操作。您必须使用UITextView
,或者也可以使用TTTAttributedLabel
(您可以找到TTTAttributedLabel
here)。以下示例代码(受旧版Ray Wenderlich文章启发)使用UITextView
。
NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:@"Something should happen when you press _here_"];
[attributedString addAttribute:NSLinkAttributeName
value:@"yoururlscheme://_here_"
range:[[attributedString string] rangeOfString:@"_here_"]];
NSDictionary *linkAttributes = @{NSForegroundColorAttributeName: [UIColor greenColor],
NSUnderlineColorAttributeName: [UIColor lightGrayColor],
NSUnderlineStyleAttributeName: @(NSUnderlinePatternSolid)};
// assume that textView is a UITextView previously created (either by code or Interface Builder)
textView.linkTextAttributes = linkAttributes; // customizes the appearance of links
textView.attributedText = attributedString;
textView.delegate = self;
然后,要实际捕获链接上的点按,请实现以下UITextViewDelegate方法:
- (BOOL)textView:(UITextView *)textView shouldInteractWithURL:(NSURL *)URL inRange:(NSRange)characterRange {
if ([[URL scheme] isEqualToString:@"yoururlscheme"]) {
NSString *tappedWord = [URL host];
// do something with this word, here you can show your dialogbox
// ...
return NO; // if you don't return NO after handling the url, the system will try to handle itself, but won't recognize your custom urlscheme
}
return YES; // let the system open this URL
}
我发现UITextView
NSAttributedString
和自定义网址非常强大,你可以用它们做很多事情,你也可以通过你的网址发送参数,这有时非常方便。
您可以将网址方案更改为在您的情况下更有意义的内容(而不是yoururlscheme
)。确保在创建URL和处理URL并检查url方案时更改它。例如,如果要在文本视图中点击文本时想要有多个行为,也可以有多个网址方案。