使NSString的不同部分可单击

时间:2015-04-22 19:24:03

标签: ios objective-c nsstring uitapgesturerecognizer

在我的应用程序中,我正在从服务器上的文本文件中读取。当我得到这个NSString我想基本上使它的不同部分可点击,这样如果他们点击某个句子,那么它将打开一个对话框。我该怎么做?

我已经阅读了有关使用UITapGestureRecognizer的内容,但我不知道如何使用它来识别一串文字,而不是一次只识别一个单词。

我也研究过NSMutableAttributedStrings,但我只是找不到我需要知道如何做到这一点。

任何帮助都将不胜感激。

1 个答案:

答案 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方案时更改它。例如,如果要在文本视图中点击文本时想要有多个行为,也可以有多个网址方案。