OHAttributedLabel在iPad上运行得非常好,但在iPhone上则不然

时间:2011-09-08 07:18:42

标签: iphone objective-c cocoa-touch ipad uilabel

我正在使用NSTextCheckingResult类将文本显示为链接。我正在使用此OHAttributedLabels来处理它。

我只想检测电话号码和电子邮件ID。那就是我只希望电话号码和电子邮件ID突出显示为链接

现在的问题是,以下代码适用于iPad,但不适用于iPhone:

self.automaticallyAddLinksForType = NSTextCheckingTypeDate|NSTextCheckingTypeLink|NSTextCheckingTypePhoneNumber;

但是相同的代码甚至显示了5位ZipCodes和iPhone中的链接。它在iPad上运行得非常好。可能有什么不对?

2 个答案:

答案 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;