我在表格中的UITableViewCell中有一个UITextView。关闭UITextView的“editable”,这允许我将dataDetectorTypes设置为UIDataDetectorTypeAll,这正是我想要的。该应用程序现在可以检测用户何时触摸UITextView中的链接,并执行相应的操作。
当用户触摸没有链接的部分UITextView时,会出现问题。我希望调用UITableView委托中的didSelectRowAtIndexPath。但事实并非如此,因为即使没有检测到链接,UITextView也会捕获触摸。
我的第一个猜测是将UITextView上的userInteractionEnabled变为NO。这意味着将调用didSelectRowAtIndexPath,但是UITextView无法检测到链接。这是一个捕获22。
有关如何解决此问题的任何想法?
感谢您的帮助。
答案 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)
}
}