2011-09-08 85 views
1

我正在使用NSTextCheckingResult类将文本显示为链接。我正在使用这个OHAttributedLabels来处理它。OHAttributedLabel在iPad上完美运行,但在iPhone上运行得并不顺利

我只想检测电话号码和电子邮件ID。这是我唯一想要的电话号码和电子邮件ID可高亮显示的链接

现在的问题是,下面的代码工作完全正常为iPad而不是iPhone:

self.automaticallyAddLinksForType = NSTextCheckingTypeDate|NSTextCheckingTypeLink|NSTextCheckingTypePhoneNumber; 

但同样的代码显示,即使5位ZipCodes作为iPhone中的链接。它在iPad中运行得非常好。什么可能是错的?

回答

2

我是OHAttributedLabel类的创建者。感谢您使用它!

前面已经直接通过电子邮件回答你,OHAttributedLabel使用苹果的NSDataDetector类自动检测上的文本链接。

所以如果有misrecognised环节,尤其是误报,这是由于苹果的NSDataDetector实施(和OHAttributedLabel不能为此做太多,可惜)。 这似乎有些奇怪的唯一的事情是,NSDataDetector不检测在iPad和iPhone相同的链接...


唯一的解决方法可以实现,如果你不满意苹果的NSDataDetector发现链接,是从automaticallyAddLinksForType中删除NSTextCheckingTypePhoneNumber值,并自行找到链接,例如使用NSRegularExpression的类。

无论如何,如果你打算,要小心,手动检测电话号码不是微不足道的,有点棘手。尤其是,电话号码的格式取决于电话号码所在的国家(美国电话的格式与法国或英国电话不同),它们可以使用空格或破折号(或不使用)格式化,它们可以采用国际格式(336 07 ...)等等......

其实,这是因为这种复杂性,苹果的NSDataDetector无法避免假阳性匹配可能...

HTH

+0

作为iPhone和iPad之间'NSDataDetector'行为差异的可能解释,可能您的设备不使用相同的NSLocale。如果您的语言,地区格式和日历相同,请检查您设备的设置(常规>国际),因为**也许**'NSDataDetector'使用它们来确定要检测的电话号码格式?! – AliSoftware

2

请尝试下面的行,因为我成功运行代码,也适用于iPhone。

label2.automaticallyAddLinksForType = NSTextCheckingTypeDate|NSTextCheckingTypeAddress|NSTextCheckingTypeLink|NSTextCheckingTypePhoneNumber; 
+0

我认为它仍然没有不能正常显示。在实现您的答案后,我仍然显示所有人的链接我收到电子邮件,地址,5位邮政编码,电话,传真的链接 –

+0

您是否有更好的解决方案? –

+0

我试着解决你的问题。 –

相关问题