2

私はiOS開発の初心者です。UITextView の外をタップしたときにキーボードを非表示にしたい。私の TextView は UITableView のセルにあります。問題は、上部にツールバーがあり、ボタンが反応しなくなったことです。メソッド「shouldReceiveTouch」を実装しましたが、私のテストは正しくないと思います。何か案は?ありがとう、そして私の悪い英語でごめんなさい..

私のViewDidLoadで:

tap = [[UITapGestureRecognizer alloc]
                               initWithTarget:self
                               action:@selector(dismissKeyboard)];
tap.delegate = self;
[self.view addGestureRecognizer:tap];

注: タップは UITapGestureRecognizer プロパティです。

実装されたメソッド:

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

    if ([touch.view isKindOfClass:[UIBarButtonItem class]]) {
        return NO;
    }
    return YES;
}

-(void)dismissKeyboard {
    [tview resignFirstResponder];
}
4

4 に答える 4

1

UIBarButtonItem は UIView のサブクラスではないため、shouldReceiveTouch は引き続き YES を返します。

cellForRowAtIndexPath でセルを初期化するときに、UIToolbar 全体を除外するか、UITableViewCell にタップ ジェスチャ認識エンジンを追加してみてください。

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

    if ([touch.view isKindOfClass:[UIToolbar class]]) {
        return NO;
    }
    return YES;
}
于 2013-06-06T15:31:01.643 に答える
0

UIScrollViewデリゲートのdidScrollメソッドを使用してキーボードを辞任します。TableViewはUIScrollViewのサブクラスでもあるため、機能するはずです。

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
     [tview resignFirstResponder];
}

またはこれを使用します

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
  [tview resignFirstResponder];
}

それでもジェスチャーを使用したい場合は、ジェスチャーをtableViewに追加する代わりに、tableViewのUIViewまたはself.viewまたはsuperViewに追加します

次のコードを試してください:----

コードをそのままにして、このメソッドを追加します

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
     [tview resignFirstResponder];
}
于 2013-06-06T13:44:43.080 に答える
0

viewDidLoad で self.view.userInteractionEnabled = yes; を設定します。

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {

UITouch *touch = [[event allTouches] anyObject];

if ([touch view] == tview) {

    [tview resignFirstResponder];

}

}
于 2013-06-06T15:15:20.773 に答える
0

ジェスチャをテーブル ビューに追加する必要があります。

 tap = [[UITapGestureRecognizer alloc]
                                   initWithTarget:self
                                   action:@selector(dismissKeyboard)];
    tap.delegate = self;
    [tblView addGestureRecognizer:tap];
于 2013-06-06T13:48:11.483 に答える