我正在使用NSTextCheckingResult类将文本显示为链接。我正在使用此OHAttributedLabels来处理它。
我只想检测电话号码和电子邮件ID。那就是我只希望电话号码和电子邮件ID突出显示为链接
现在的问题是,以下代码适用于iPad,但不适用于iPhone:
self.automaticallyAddLinksForType = NSTextCheckingTypeDate|NSTextCheckingTypeLink|NSTextCheckingTypePhoneNumber;
但是相同的代码甚至显示了5位ZipCodes和iPhone中的链接。它在iPad上运行得非常好。可能有什么不对?
答案 0 :(得分:2)
我是OHAttributedLabel类的创建者。感谢您使用它!
正如已经通过电子邮件直接回答, OHAttributedLabel
使用Apple的NSDataDetector
班级自动检测文字上的链接。
因此,如果存在误识别的链接,尤其是误报,由于Apple的NSDataDetector
实施而导致<和OHAttributedLabel
对此无能为力,不幸的是)。 唯一看起来很奇怪的是NSDataDetector
在iPad和iPhone上没有检测到相同的链接......
您可以实施的唯一解决方法,如果您对Apple NSDataDetector
找到的链接不满意,请从NSTextCheckingTypePhoneNumber
中移除automaticallyAddLinksForType
值,您可以自己查找链接,例如使用NSRegularExpression
的类。
无论如何,如果您打算这样做,请小心,因为手动检测电话号码并非易事,而且有点棘手。特别是,电话号码的格式取决于电话号码所在的国家/地区(美国电话的格式与法国或英国不同),可以使用空格或短划线(或不是)格式化,也可以是国际格式(+336 07 ......)依此类推......
实际上,这可能是因为这种复杂性导致Apple NSDataDetector
无法避免误报匹配......
HTH
答案 1 :(得分:1)
尝试下面的行,因为我成功运行代码,也适用于iPhone。
label2.automaticallyAddLinksForType = NSTextCheckingTypeDate|NSTextCheckingTypeAddress|NSTextCheckingTypeLink|NSTextCheckingTypePhoneNumber;