用于点击号码的UITextView自定义操作

时间:2013-09-05 14:28:36

标签: ios objective-c cocoa-touch uikit uitextview

我的应用中有UITextView,用于显示带数字的字符串。这些号码可以是电话号码或应用程序特定的其他号码。如果用户点击电话号码,则应询问他们是否要拨打电话(默认情况下已完成)。但是,如果用户点击不是电话号码但特定于应用的其他号码,则该操作应该是自定义的,例如它应该使用数字作为参数调用视图控制器中的方法。

我进行了快速搜索,但找不到任何简单的解决方案。

知道如何做到这一点?任何帮助将不胜感激。

2 个答案:

答案 0 :(得分: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;
        }
    }
}

答案 1 :(得分: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;

}

eta:您还需要将UIGestureRecognizerDelegate作为协议添加到您的UIViewController中:

@interface MyViewController : UIViewController <UIGestureRecognizerDelegate>

更新:

如何使用UITextViewDelegate方法改为使用textViewDidChangeSelection?

检查textview的selectedRange属性以检查其内容。