在UITextView中点击自定义URL链接时,委托会收到nil URL

时间:2015-12-09 10:48:49

标签: ios nsattributedstring custom-url

我有tableView tableViewCells cell,显示textView
textView使用attributedString自定义网址链接信息,在tableView:cellForRowAtIndexPath:中进行设置,如this tutorial所示:

NSMutableAttributedString *attributedDisplayString = [[NSMutableAttributedString alloc] initWithString:displayString];
[attributedDisplayString addAttribute:NSLinkAttributeName 
                                value:[NSString stringWithFormat:@"username://%@", userName] 
                                range:NSMakeRange(0, userName.length)];
cell.textView.attributedText = attributedDisplayString;

当我点击链接时,在委托中调用textView:shouldInteractWithURL:inRange:,因此检测到自定义URL链接并作出响应。

但是,提供的网址为nil

我错过了什么?

1 个答案:

答案 0 :(得分:1)

抱歉问得太快了。我发现了问题,但也许这有助于其他人:

我的变量userName只包含space,因此无法转换为URL

删除空格后,它可以正常工作。

要创建一个可用于URL的字符串,可以在iOS8及更早版本中使用 stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding

和iOS9

stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]