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