UIGestureRecognizer和UITextView

mic*_*ckm 4 uitextview uigesturerecognizer ios

我正在实现一个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];
}
Run Code Online (Sandbox Code Playgroud)

问题是,一旦它被设置为第一响应者,然后通过点击该文本视图外部来重新签名,我的手势识别器方法永远不会被再次调用.如果我点击没有设置第一响应者的区域,那么我点击时会多次调用我的方法.如果我设置然后辞职第一响应者,它在第一次辞职后没有响应.

- (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]);  
}

在尝试的时候,如果我在每次辞职后添加一个新的手势识别器,那么这是有效的,但显然不是一个好的解决方案.

有什么想法吗?

ami*_*tob 5

我有同样的问题,我通过实现虚拟解决了它 UIGestureRecognizerDelegate

将此添加到您的代码中

myGestuerRecognizer.delegate = self
Run Code Online (Sandbox Code Playgroud)

然后实现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;  }
Run Code Online (Sandbox Code Playgroud)

这对我有用