如果我允许这样的用户交互:
textVIEw.userInteractionEnabled=NO;textVIEw.dataDetectorTypes =UIDataDetectorTypelink;
dIDSelectRowAtIndexPath没有被调用,我理解为什么但是如何实现这个?
编辑:
我正在寻找的是能够专门识别链接并允许用户点击链接打开浏览器并禁用其他textVIEw的交互.如上所述,整个行也应该是可点击的.
附件是我的tableVIEw单元格行的图像,它显示检测到链接并且也可以进行交互,但这会禁用textVIEw区域内的dIDSelectRowAtIndexPath.
解决方法 一种可能的(也是复杂的)解决方案是在UITextVIEw中使用带有UITapGestureRecogniser的UIVIEws.>首先,您需要找到链接的NSRange.
>将NSRange转换为UITextRange
>使用类似于以下内容的代码在UITextVIEw中的链接文本之上添加UITapGestureRecogniser.
UITextposition *pos = textVIEw.endOfdocument;// textVIEw ~ UITextVIEwfor (int i = 0; i < words*2 - 1; i++){// *2 since UITextGranularityWord consIDers a whitespace to be a word UITextposition *pos2 = [textVIEw.tokenizer positionFromposition:pos toBoundary:UITextGranularityWord inDirection:UITextLayoutDirectionleft]; UITextRange *range = [textVIEw textRangeFromposition:pos toposition:pos2]; CGRect resultFrame = [textVIEw firstRectForRange:(UITextRange *)range ]; UIVIEw* tapVIEwOnText = [[UIVIEw alloc] initWithFrame:resultFrame]; [tapVIEwOnText addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(targetRoutine)]]; tapVIEwOnText.tag = 125; [textVIEw addSubvIEw:tapVIEwOnText]; [tapVIEwOnText release]; pos = pos2;
}
我在这段代码中所做的是,得到相关文本的UITextRange,得到它的firstRectForRange,并在它上面添加了一个透明的可点击的UIVIEw.
您必须使用一些regEx获取链接的范围,将其转换为UITextRange,并在它们上添加可点击的UIVIEws.如果单个textVIEw中可能有多个链接,您可能会在每个视图中添加一个与其“链接”对应的标记,并通过检查其标记在目标方法中打开该链接.
注意:如果您的UITextVIEw是普遍不可编辑的,您可能需要尝试TTTAttributedLabel
.这就是我在UItableVIEwCells中所做的
以上是内存溢出为你收集整理的ios – 如何在文本中创建UITextView检测链接部分并仍然具有userInteractionDisabled?全部内容,希望文章能够帮你解决ios – 如何在文本中创建UITextView检测链接部分并仍然具有userInteractionDisabled?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)