在UITableViewCell中的UITextView上启用dataDetectorTypes

时间:2012-07-05 15:34:11

标签: iphone uitableview uitextview datadetectortypes

我在表格中的UITableViewCell中有一个UITextView。关闭UITextView的“editable”,这允许我将dataDetectorTypes设置为UIDataDetectorTypeAll,这正是我想要的。该应用程序现在可以检测用户何时触摸UITextView中的链接,并执行相应的操作。

当用户触摸没有链接的部分UITextView时,会出现问题。我希望调用UITableView委托中的didSelectRowAtIndexPath。但事实并非如此,因为即使没有检测到链接,UITextView也会捕获触摸。

我的第一个猜测是将UITextView上的userInteractionEnabled变为NO。这意味着将调用didSelectRowAtIndexPath,但是UITextView无法检测到链接。这是一个捕获22。

有关如何解决此问题的任何想法?

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

也许你可以尝试通过触摸响应链。

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
   [super touchesBegan:touches withEvent:event];
}

答案 1 :(得分:0)

覆盖所有四个UIResponder触摸处理程序,转发到文本视图的超级视图。

头文件指出"通常,执行自定义触摸处理的所有响应者都应该覆盖所有这四种方法。 ...您必须处理取消的触摸以确保您的应用程序中的正确行为。如果不这样做很可能导致不正确的行为或崩溃。"

class MyTextView: UITextView {

    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
        self.superview?.touchesBegan(touches, withEvent: event)
    }

    override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?) {
        self.superview?.touchesMoved(touches, withEvent: event)
    }

    override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) {
        self.superview?.touchesEnded(touches, withEvent: event)
    }

    override func touchesCancelled(touches: Set<UITouch>?, withEvent event: UIEvent?) {
        self.superview?.touchesCancelled(touches, withEvent: event)
    }

}