0

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

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

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

4

2 回答 2

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;
        }
    }
}
于 2014-06-18T12:49:13.947 回答
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 属性以检查其内容。

于 2013-09-05T14:38:50.837 回答