0

UITapGestureRecognizer を備えた UIView があり、その上で textFields とチェックボックスを使用しています。このgestureRecongizerを使用して、他の場所をクリックしてキーボードを削除したいと思います。

しかし、私のチェックボックスが recongizer のセレクターを呼び出すことを知っていますか? この動作を回避するにはどうすればよいですか?exclusiveTouch プロパティを既に試しましたが、うまくいきませんでした。

この問題に適したワークフローを教えてくれる人はいますか?

4

3 に答える 3

0

チェックボックスはおそらくカスタムコードですか?ボタンまたは別のタイプのUIViewは、UIViewのサブビューであり、タップを処理する独自のメソッド(たとえば、UITextFieldなど)がない限り、スーパービューレコグナイザーを呼び出すことになります。

したがって、各チェックボックスに独自のレコグナイザーを指定して、そのときに発生するすべてのチェックボックス、またはすべてのチェックボックスのレコグナイザーを処理できるようにすることで、これを回避できます。これにより、タップを処理してチェックボックスをオンまたはオフにすることができます。

たとえば、これに沿った何か。

- (void) viewDidLoad
{
    UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTap):];

    [singleTap setNumberOfTapsRequired:1];
    [checkbox addGestureRecognizer:singleTap];
}

- (void) handleSingeTap: (id) sender
{
  //check/uncheck the apropriate chexbox
}
于 2012-11-28T10:57:21.150 に答える
0

1- レコグナイザ デリゲートとして登録しますtapRecognizer.delegate = self;(UIGestureRecognizerDelegate であることを宣言します)。

2- shouldReceiveTouch を実装する

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {

}

3- touch.view をチェックして、ジェスチャーがそのタッチを処理する必要があるかどうかを判断します。あなたの場合、チェックボックスビューの場合は NO を返します。

 - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
    if ([touch.view isKindOfClass:[yourCheckboxClass class]]) {
    return NO; // ignore the touch
    }
    return YES;
    }

( isKindOfClass を使用する必要はありません。他の方法を使用して、チェックボックスかどうかを判断できます)

于 2012-11-28T11:02:50.920 に答える
0

さらに簡単な 3 番目の方法を見つけました。

ジェスチャープロパティ「cancelsTouchesinview」を使用し、「NO」に設定しました

gesture.cancelsTouchesinview = NO; 
于 2012-11-28T12:46:09.723 に答える