UITextView shouldInteractWithURL 委托方法无法通过超链接工作

UITextView shouldInteractWithURL delegate methods not working through hyperlink

提问人:Sarthak 提问时间:4/7/2022 最后编辑:Sarthak 更新时间:4/7/2022 访问量:318

问:

我已经参考了这个,但对我不起作用:如何拦截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。

iOS Swift Objective-C 超链接 UINuageController

评论

0赞 Larme 4/7/2022
alertLabel: 那是,对吧?因为这个名字令人困惑。到底出了什么问题?是否调用了委托方法?您是否设置了 ?你真的有吗?因为如果是这样,什么都不会发生。UITextViewUITextViewnavigationControllernil
0赞 Sarthak 4/7/2022
是的,alertLabel 是 UITextView,我在代码中编辑了名称。.没有对委托方法的调用。是的,我已经在 ViewDidLoad 中设置了委托方法:[ _myTextView.delegate self];当我单击超链接时,我的代码正在打开 google.com。
0赞 Larme 4/7/2022
TextView 需要是可选的,而不是可编辑的,是这样吗?
0赞 Sarthak 4/7/2022
是的,使 TextView 可选择且无法通过情节提要进行编辑......我正在另一个函数中使用该超链接代码。
0赞 Larme 4/7/2022
[ _myTextView.delegate self],你的意思是还是,对吧?您能否实现其他委托方法,以确保它们是否被调用?Miight 需要使文本视图可编辑才能触发它们,就像编辑委托一样。_myTextView.delegate = self[_myTextView setDelegate:self]

答:

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