2012-03-26 140 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%肯定這個班使用了一堆正則表達式,但好處是它經受住了比你能夠合理地做的更多的測試。