2013-09-05 45 views
0

我有一個UITextView在我的應用程序,它是用來顯示一些字符串與數字。這些號碼可以是電話號碼或特定於應用的其他號碼。如果用戶點擊電話號碼,則應詢問他們是否要撥打電話(這是默認完成的)。但是,如果用戶點擊另一個不是電話號碼但是特定於該應用的號碼,則該操作應該是自定義的,例如,它應該在視圖控制器中以數字作爲參數來調用一個方法。UITextView自定義動作點擊數

我有一個快速搜索,但找不到任何簡單的解決方案。

任何想法如何做到這一點?任何幫助,將不勝感激。

回答

0

添加UITapGestureRecognizer到的UITextView藉助其委託設置爲父的UIViewController:

UITapGestureRecognizer *recognizer = [[UITapGestureRecognizer alloc] initWithTarget:self 
                      action:@selector(handleTap:)]; 
    [myTextView addGestureRecognizer:recognizer]; 

的添加處理方法到您的UIViewController:

- (void)handleTap:(UITapGestureRecognizer *)sender{ 
     UITextView *textView = (UITextView*)sender; 
     NSString *number = textView.text; 

} 

埃塔:你需要UIGestureRecognizerDelegate添加爲一個協議到你的UIViewController太:

@interface MyViewController : UIViewController <UIGestureRecognizerDelegate> 

更新:

如何使用UITextViewDelegate方法textViewDidChangeSelection呢?

檢查textview的selectedRange屬性以檢查其內容。

+0

這是行不通的。首先,只能在點擊數字時才調用該方法(而不是整個textView)。第2個textView中的文本不僅是該數字,還包含其他字符串,並且使用默認檢測高亮顯示數字。謝謝! –

+0

.-。,你真的只想要數字而不是保存數字的視圖的像素檢測? –

+0

@JohnRiselvato不,我不需要像素檢測。這些數字在textView中突出顯示。我只想覆蓋點擊數字的默認行爲。默認情況下,它要求發起對該號碼的呼叫。 –

1

我能夠通過實現'UITextViewDelegate'來解決這個問題。

- (BOOL)textView:(UITextView *)textView shouldInteractWithURL:(NSURL *)URL inRange:(NSRange)characterRange 

{ 
    DLog(@"URL is %@", URL.absoluteString) 

    NSString *host = [URL host]; 
    NSNumber *adIdInLink = nil; 

    NSRange range = NSMakeRange(0, 3); 
    NSString *subString = [URL.absoluteString substringWithRange:range]; 

    if ([subString isEqualToString:@"tel"] && !host) { 
     // this is a number - do whatever you want 
     NSString *stringWithAdId = [URL.absoluteString substringFromIndex:4]; 
     if ([HJUtilities isValidAdId:stringWithAdId]) { 
      // this is the ad Id a custom number used in my app 
      adIdInLink = [NSNumber numberWithInteger:[stringWithAdId integerValue]]; 
     } 
     else { 
      // this was a phone number - let the default behaviour 
      return YES; 
     } 
    } 
}