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 *)送信者 {
    [self.view endEditing:YES];

    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(textViewTapped:)];
    [self.myTextView addGestureRecognizer:タップ];
    NSArray *gestures = [self.myTextView ジェスチャレコグナイザー];
    NSLog(@"%d 個のレコグナイザーを取得しました", [ジェスチャー数]);  
}

物事を試すだけで、辞任するたびに新しいジェスチャー認識エンジンを追加すると、それは機能しますが、明らかに良い解決策ではありません.

何かご意見は?

4

2 に答える 2

5

私は同じ問題を抱えており、ダミーを実装することで解決しました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 に答える