UITextView在UITableViewCell中 - 如果不点击链接,触摸即可完成

时间:2014-03-10 17:11:51

标签: ios uitableview touch uitextview datadetectortypes

我正试图在TableViewCell中使用带有数据检测器类型的UITextView,这本身就是可点击的。

唯一的问题是,我需要UITextView的链接是可点击的,所以userInteractionEnabled = YES,不幸的是这会阻止任何触摸进入UITableViewCell。

当然UITextView无法编辑,我还将其子类化,拒绝它作为第一响应者,以避免在其中选择文本。

我唯一需要的是检测到如果用户触摸UITextView,检查它是否是链接,是否正在打开链接,否则重定向UITableViewCell上的触摸。

任何想法如何做到这一点?

很像twitter应用程序(我们可以点击行,也可以点击链接......)

1 个答案:

答案 0 :(得分:2)

我知道这个问题已经被问过了一段时间,但是某些应用程序仍然非常需要使用UIDataDetectors的可点击单元格。

所以这里是UITextView子类,我在UITableView中适应这种特殊行为

-(id) initWithFrame:(CGRect)frame {
    self = [super initWithFrame:frame];
    if (self) {
        self.delegate = self;
    }
    return self;
}

- (BOOL)canBecomeFirstResponder {
    return NO;
}

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    UIView *obj = self;

    do {
        obj = obj.superview;
    } while (![obj isKindOfClass:[UITableViewCell class]]);
    UITableViewCell *cell = (UITableViewCell*)obj;

    do {
        obj = obj.superview;
    } while (![obj isKindOfClass:[UITableView class]]);
    UITableView *tableView = (UITableView*)obj;

    NSIndexPath *indePath = [tableView indexPathForCell:cell];
    [[tableView delegate] tableView:tableView didSelectRowAtIndexPath:indePath];
}

- (BOOL)textView:(UITextView *)textView shouldInteractWithURL:(NSURL *)URL inRange:(NSRange)characterRange {
    return YES;
}

您可以修改它以满足您的需求......

希望它有所帮助。