4

我正在实现一个 UITextView,我只想响应文本视图指定部分中的触摸。

我有一个手势识别器附加到视图,并且工作正常,直到我将视图设置为第一响应者,如果视图中的点击点大于 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];
}

问题是,一旦它被设置为第一响应者,然后通过在该文本视图之外点击而辞职,我的手势识别器方法将不再被调用。如果我在未设置第一响应者的区域中点击,那么我的方法会在我点击时被调用多次。如果我设置然后辞职第一响应者,它在第一次辞职后不会响应。

- (IBAction)viewTapped:(UIGestureRecognizer *)sender {
    [self.view endEditing:YES];

    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(textViewTapped:)];
    [self.myTextView addGestureRecognizer:tap];
    NSArray *gestures = [self.myTextViewgestureRecognizers];
    NSLog(@"得到 %d 个识别器", [手势计数]);  
}

在只是尝试的情况下,如果我在每次辞职后添加一个新的手势识别器,那么这是可行的,但显然不是一个好的解决方案。

有什么想法吗?

4

2 回答 2

5

我有同样的问题,我通过实现 dummy 解决了它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;  }

这对我有用

于 2012-08-27T17:56:07.390 回答
0

iOS 10 斯威夫特 3.0

func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {    
  return true
}
于 2016-11-03T08:33:09.470 回答