当文本视图可编辑时,iphone UITextView不支持数据检测器

obe*_*aum 11 iphone uitextview datadetectortypes

我在构建时(iPhone模拟器)收到一个有趣的警告,提供以下内容:

EditView.xib:35:0 UITextView does not support data detectors when the text view is editable.
Run Code Online (Sandbox Code Playgroud)

这在Google上基本上不存在,我想删除它.

我的editview.xib有一个textview,我在其中写下注释.还有其他需要的信息吗?

New*_*man 9

我有四个不同的Xib,它们具有类似的TextView,也用于注释.我得到了同样的警告.禁用"检测电话号码""检测链接"的建议会删除警告.但是,我希望我的用户仍然能够在笔记中使用探测器.

这就是我在我的应用中解决问题的方法:

  1. 在IB中:我取消选择TextView的两个属性. - (这会停止构建警告).

  2. 在我的- (void)viewDidLoad {设置中,我将textView的属性设置为: myTextView.dataDetectorTypes = UIDataDetectorTypeAll;它启用了所有类型的数据检测器(电话号码和URL地址).

  3. 在我的View Controller的-(void)textViewDidBeginEditing:(UITextView *)sender { 方法中,我使用以下方法将数据检测器关闭: myTextView.dataDetectorTypes = UIDataDetectorTypeNone

  4. 然后利用这个-(void)textViewDidEndEditing:(UITextView *)sender { 方法,我使用以下方法将它们重新打开: myTextView.dataDetectorTypes = UIDataDetectorTypeAll;

当用户编辑UITextView时,此方法禁用数据检测器,并在用户完成编辑时将数据检测器重新打开.这个修复允许从textView中选择电话号码和URL,这样我就没有松开这个功能.


我在UITextView的DataDetector上的Apple Docs中找到了以下内容:在玩了UITextView一段时间后,希望它有所帮助.

UIDataDetectorTypes:

定义可在基于文本的内容中检测到的信息类型.

类型:

  • UIDataDetectorTypePhoneNumber;
  • UIDataDetectorTypeLink;
  • UIDataDetectorTypeNone;
  • UIDataDetectorTypeAll;


更新:11-5-2010;

额外注意: 如果UITextView是"可编辑的",则不允许使用数据检测器,因为会有太多变量来跟踪用户对文本的更改以及尝试执行电话或链接时的触摸.

解决方案: 加载TextView self.textView.editable = NO;并根据我上面列出的类型设置UIDataDetector.这样,如果用户想要"选择"网址或电话号码等,代表就可以处理.当您需要用户编辑self.textView.editing = YES;textView时,请相应地打开&删除您的UIDataDetectors.这应该确保在编译期间没有错误或警告.

特别注意事项: 确保在重新启用时首先删除datadectors,然后启用"editing = YES;"...如果仍然分配了UIdatadetectors,则启用编辑的顺序非常重要.

因此,序列顺序应该是这样的......

  • 编辑textView: 1.删除数据检测器,然后启用编辑= YES.

  • 要使用DataDetectors: 1.禁用Editing = NO; 2.然后添加数据检测器.

  • 那就对了.但非常非常优雅的faaaaar.在Notes应用程序中存在类似于它的无缝解决方案之前,我们更愿意选择不使用数据类型.谢谢你的帮助! (2认同)

小智 7

我也看到了这个警告.以下是我修复它的方法:

在Interface Builder的xib文件中,选择文本视图,然后打开属性检查器.确保"检测电话号码"和"检测链接"都是未检查的.

我检查了"检测链接",结果发现导致警告的原因.基本上,如果textview是可编辑的,则不希望打开这些自动检测功能.

  • "你不希望这些自动检测功能开启." - 但Apple的Notes应用程序就是这样做的.我们为什么不应该? (2认同)

小智 6

罗嗦!

textView.editable = NO;
textView.dataDetectorTypes = UIDataDetectorTypeAll;
Run Code Online (Sandbox Code Playgroud)

URL地址必须以"http://"开头,否则textview无法检测到它.