提问人:Sarthak 提问时间:4/7/2022 最后编辑:Sarthak 更新时间:4/7/2022 访问量:318
UITextView shouldInteractWithURL 委托方法无法通过超链接工作
UITextView shouldInteractWithURL delegate methods not working through hyperlink
问:
我已经参考了这个,但对我不起作用:如何拦截UITextView中的链接点击?
我在 UITextView 上有超链接文本,单击超链接文本后,我们必须打开另一个视图控制器。
创建超链接我已经这样做了
NSString *str = @"No products found for your pincode,Edit your pincode";
NSMutableAttributedString *aStr = [[NSMutableAttributedString alloc]initWithString:str attributes:nil];
[aStr addAttribute:NSLinkAttributeName value:@"https://www.google.com/" range:[str rangeOfString:@"Edit your pincode"]];
[self.myTextView setAttributedText:aStr];
打开 AnotherViewController,我使用了 UITextView shouldInteractWithURL 委托方法。
- (BOOL)textView:(UITextView *)textView shouldInteractWithURL:(NSURL *)URL inRange:(NSRange)characterRange interaction:(UITextItemInteraction)interaction{
TATViewController *tatVC = [[self getStoryboardWithStoryboardType: kListingStoryboard] instantiateViewControllerWithIdentifier: @"TATViewControllerID"];
[self.navigationController presentViewController: tatVC animated:true completion:nil];
return false;
}
我的问题是如何管理 TextView 委托代码和超链接代码以打开 ViewController。
答:
1赞
Larme
4/7/2022
#1
如果未调用委托方法,通常是因为两个潜在问题:
委托方法不正确。可能会出现拼写错误,因此,该对象不实现委托方法,而是实现另一个方法,其签名几乎与委托方法相似,但不相同。 在内部,对象可以检查是否存在委托集,以及委托是否实现了该方法,在这种情况下它没有实现该方法,并且不会调用它。
最常遇到的错误是未设置委托。
你写了 ,而不是 或 .您没有正确设置委托。相反,您正在调用 getter/method self
on ,它返回 .
您决定通过 Interface Builder (Storyboard/Xib) 设置委托,但修复调用也可以解决您的问题。[ _myTextView.delegate self]
[_myTextView setDelegate:self]
_myTextView.delegate = self
_myTextView
_myTextView
评论
alertLabel
: 那是,对吧?因为这个名字令人困惑。到底出了什么问题?是否调用了委托方法?您是否设置了 ?你真的有吗?因为如果是这样,什么都不会发生。UITextView
UITextView
navigationController
nil
[ _myTextView.delegate self]
,你的意思是还是,对吧?您能否实现其他委托方法,以确保它们是否被调用?Miight 需要使文本视图可编辑才能触发它们,就像编辑委托一样。_myTextView.delegate = self
[_myTextView setDelegate:self]