将UITapGestureRecognizer添加到UITextView而不阻止textView触摸

Ber*_*rnd 11 uitextview ios uitapgesturerecognizer swift

我如何添加UITapGestureRecognizer到一个UITextView,但仍然获得了通过对这些触摸UITextView正常

目前,只要我向textView添加自定义手势,它就会阻止点击UITextView默认操作,例如定位光标.

var tapTerm:UITapGestureRecognizer = UITapGestureRecognizer()

override func viewDidLoad() {
    tapTerm = UITapGestureRecognizer(target: self, action: "tapTextView:")
    textView.addGestureRecognizer(tapTerm)
}

func tapTextView(sender:UITapGestureRecognizer) {
    println("tapped term – but blocking the tap for textView :-/")
…
}
Run Code Online (Sandbox Code Playgroud)

我如何处理点击但保持像光标定位一样的textView行为?

Zel*_* B. 24

要做到这一点,你的视图控制器采用UIGestureRecognizerDelegate和覆盖应同时识别手势识别器方法,如:

override func viewDidLoad() {
    tapTerm = UITapGestureRecognizer(target: self, action: "tapTextView:")
    tapTerm.delegate = self
    textView.addGestureRecognizer(tapTerm)
}

func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWithGestureRecognizer otherGestureRecognizer: UIGestureRecognizer) -> Bool {

    return true
}
Run Code Online (Sandbox Code Playgroud)

  • 这对我不起作用。它仅切换手势识别器,而无需在 UITextView 和点击手势识别器之间共享事件。我希望能够滚动文本并能够通过 UIGestureRecognizer 点击或双击退出 UITextView/UIViewController。必须与 UIButton 共享屏幕空间才能退出,这并不优雅。 (3认同)

Ani*_*mar 5

如果有人来这里寻找 @Zell B. 在 Objective C 中的答案,代码如下:

- (void)viewDidLoad {
    [super viewDidLoad];

    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(textViewTapped:)];
    tap.delegate = self; 
    tap.numberOfTapsRequired = 1; 
   [self.textView addGestureRecognizer:tap];
}   

- (void)textViewTapped:(UITapGestureRecognizer *)tap {
    //DO SOMTHING 
}

#pragma mark - Gesture recognizer delegate

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
    return YES; 
}
Run Code Online (Sandbox Code Playgroud)

PS:别忘了<UIGestureRecognizerDelegate>