我的应用程序中有一个UITextView
用于显示一些带有数字的字符串。这些号码可以是电话号码或特定于应用程序的其他号码。如果用户点击电话号码,则应询问他们是否要拨打电话(默认情况下会这样做)。但是,如果用户点击另一个不是电话号码但特定于应用程序的号码,则该操作应该是自定义的,例如它应该调用视图控制器中的一个方法,并将该号码作为参数。
我进行了快速搜索,但找不到任何简单的解决方案。
知道如何做到这一点吗?任何帮助,将不胜感激。
我的应用程序中有一个UITextView
用于显示一些带有数字的字符串。这些号码可以是电话号码或特定于应用程序的其他号码。如果用户点击电话号码,则应询问他们是否要拨打电话(默认情况下会这样做)。但是,如果用户点击另一个不是电话号码但特定于应用程序的号码,则该操作应该是自定义的,例如它应该调用视图控制器中的一个方法,并将该号码作为参数。
我进行了快速搜索,但找不到任何简单的解决方案。
知道如何做到这一点吗?任何帮助,将不胜感激。
我能够通过实现“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;
}
}
}
将 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 属性以检查其内容。