我正在努力实现一个 UITextView,我只想在其中响应 TextView 指定部分中的触摸。
我在 View 上附加了一个手势识别器,它工作正常,直到我将 View 设置为第一响应者,如果 View 中的点击点大于 X 和 Y 值,我就会这样做。
- (IBAction)textViewTapped:(UIGestureRecognizer *)sender {
CGPoint point = [sender locationOfTouch:0 inView:self.view];
NSLog(@"x ix %f, y is %f", point.x, point.y);
if (point.x > 96 && point.y > 106)
[self.myTextView becomeFirstResponder];
}
问题是,一旦它被设置为第一响应者,然后通过在该 TextView 之外点击而辞职,我的手势识别器方法就再也不会被调用了。如果我点击未设置第一响应者的区域,那么我的方法会在我点击时被调用多次。如果我设置然后退出第一响应者,它在第一次退出后不会响应。
- (IBAction)viewTapped:(UIGestureRecognizer *)sender { [self.view endEditing:YES]; UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(textViewTapped:)]; [self.myTextView addGestureRecognizer:tap]; NSArray *gestures = [self.myTextView gestureRecognizers]; NSLog(@"got %d recognizers", [gestures count]); }
在刚刚的尝试中,如果我在每次辞职后添加一个新的手势识别器,那是可行的,但显然不是一个好的解决方案。
有什么想法吗?
最佳答案
我有同样的问题,我通过实现虚拟 UIGestureRecognizerDelegate
将此添加到您的代码中
myGestuerRecognizer.delegate = self
然后实现 UIGestureRecognizerDelegate
#pragma mark - UIGestureRecognizerDelegate
-(BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer{
return YES; }
-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer
*)otherGestureRecognizer{
return YES; }
-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch{
return YES; }
这对我有用
关于ios - UIGestureRecognizer 和 UITextView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10216782/