1

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

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

我的第一个猜测是将 UITextView 上的 userInteractionEnabled 设置为 NO。这意味着 didSelectRowAtIndexPath 将被调用,但是 UITextView 无法检测到链接。这是第 22 条规则。

有想法该怎么解决这个吗?

谢谢你的帮助。

4

2 回答 2

1

也许您可以尝试将修饰传递给响应者链。

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
   [super touchesBegan:touches withEvent:event];
}
于 2012-07-05T17:40:17.400 回答
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)
    }

}
于 2015-10-14T19:35:21.800 回答