2012-03-26 138 views
0

我正在尝试创建一个应用程序,允许您转到相应应用程序的某个应用程序(具体而言,常规Web链接转到Safari,YouTube链接转到YouTube, Google地图链接转到地图应用程序,文本行转到Notes应用程序,电话号码转到联系人(用于除iPhone之外的任何iOS设备)或电话应用程序。所有数据都在表格视图中查看巧妙地识别电话号码和文本(包括国际号码)

现在,我有一个NSMutableArray,它有一些虚拟数据(具体来说,是每种数据类型之一)。我已经成功使用了网络链接,YouTube链接和Google地图链接。问题是,我不知道如何才能识别国内和国际电话号码。

这里是NSMutableArray的数据:

NSMutableArray *sites = [[NSMutableArray alloc] initWithObjects:@"http://www.apple.com/", @"http://www.youtube.com/watch?v=QH2-TGUlwu4", @"http://maps.google.com/maps?saddr=CN+Tower&daddr=1+Yorkdale+Road+%23500,+Toronto,+ON+M6A+2T9,+Canada+(Yorkdale+Shopping+Centre)&hl=en&sll=43.68515,-79.422475&sspn=0.133818,0.308647&geocode=FdzumQIdjqBE-yGBdRzexNjtFQ%3BFUk0mwIdOp1D-yG5Hg9iD9hImQ&vpsrc=0&t=w&mra=ls&z=12", @"This is a test", @"(416)-555-5555", nil]; 

也...

self.cloudsendList = sites; 

这里是我迄今为止在当用户点击一个表格视图单元格的条款代码:

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:[NSString stringWithFormat: @"%@", [cloudsendList objectAtIndex:indexPath.row]]]]; 
} 

我不知道我是否必须用很多代码行来做到这一点,但是,这有可能吗?如果是这样,你将如何实现它?如果使用需要查看更多代码才能理解,那么我可以很乐意发布相关信息。我希望我没有造成太多麻烦,但我希望你能帮助我。我很抱歉,如果这听起来像一个总noob。提前致谢! :)

回答

2

我的感觉是,因为Apple已经在UITextView的数据检测器中解决了这个问题,所以最好使用他们的解决方案。一般用途的电话号码检测器/格式化器很难实现(即使苹果公司也不完美),你可能会花费大量的时间在一个非常脆弱的解决方案上。

我会建议将UITextView添加到UITableViewCell contentView(大小和格式正确)并确保数据检测处于打开状态。

+0

好的。那么,代码对于我现在的代码而言会是怎样的呢?为了让你知道,必须选择带有信息的tableviewcell,而不是文本本身。 – chrisjr 2012-03-27 00:12:06

+0

将UITextView设置为editable = NO。文字会变成网页上的链接,并自动执行正确的操作。这是最容易的,但你可能不喜欢视觉风格。 – sosborn 2012-03-27 00:36:08

+0

嗯...... NSPredicate呢?你会推荐吗? – chrisjr 2012-03-27 11:50:17

0

你会想要使用正则表达式。这是做到这一点的唯一方法。这是其中许多指标。

http://regexlib.com/DisplayPatterns.aspx?categoryId=7&cattabindex=6&AspxAutoDetectCookieSupport=1

我不知道,你要能够检测到所有国家,一个正则表达式。您可能需要通过几次扫描来扫描所有这些数据。

因此,擦洗你的所有数据,存储你的数据块匹配,然后用这些数据调用URL。当然,你知道如何在对象中如果/其他。

+0

好吧,让我们假设它识别英国数字(^(\ + 44 \ s?7 \ d {3} | \(?07 \ d {3} \)?)\ s?\ d {3} \ (??\ d {3})?(\?\ d {3})和美国/加拿大的数字),代码将如何看起来像我目前的代码。我想我需要使用“if”语句,并且我知道我需要使用“tel:”。 – chrisjr 2012-03-26 23:31:50

+0

不确定在objective-c中究竟有多确切。试试看。我无法从你的代码中知道发生了什么。 http://stackoverflow.com/questions/422138/regular-expressions-in-an-objective-c-cocoa-application – FlavorScape 2012-03-26 23:50:47

+0

好的。感谢你们对我的帮助。对此,我真的非常感激。 – chrisjr 2012-03-27 00:12:44

1

而不是滚动你自己,结帐Apple's NSDataDetector class。我99%肯定这个班使用了一堆正则表达式,但好处是它经受住了比你能够合理地做的更多的测试。