1

私の UIViewController 階層は次のとおりです

UIView
    UIScrollView
        UITableView
            UITableViewCell
                UITextField

UITableView は、プログラムによってビュー コントローラーに追加されます。ユーザーがビューまたは UITableView のいずれかで UTTextField の外をタップしたときにキーボードを非表示にしたい ユーザーが他の UITableView 行をタップしたときにいくつかのメソッドを実行しています

私は試した

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event

UIScrollView はタッチ イベントを送信しません。

タップジェスチャを追加してみた

UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTap:)];
[singleTap setNumberOfTapsRequired:1];

[[self view] addGestureRecognizer:singleTap];

ただし、TapGesture を使用すると、次のイベントが非表示になります

-(void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

キーボードを非表示にする他の方法はありますか?

4

5 に答える 5

2

コードを使用します:[self.view endEditing:YES];

于 2012-05-25T12:09:27.193 に答える
1

UITextFieldDelegateとメソッドを使用します

– textFieldShouldEndEditing:(UITextField*) txtField
{

[txtField resignKeyPads];
return YES:
}

これは、scrolviewdelgateでも実行できます

-(void) scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
    //resign all keypads of all textfields use array containing keypads
}

もう1つは、UIViewのクラスをUIControlに変更し、メソッドIBActionを作成し、UIControl touchupInsideをそのibactionに接続すると、キーパッドが辞任されます。

于 2012-05-03T13:25:30.060 に答える
0

バックグラウンド ビューにジェスチャ レコグナイザーを配置する場合は、それがあることを確認する必要があります。

追加

self.tableView.backgroundView = [[UIView alloc] initWithFrame:self.tableView.bounds];
于 2012-07-23T22:19:07.020 に答える
0

タップ ジェスチャを引き続き使用する場合は、次のようにジェスチャ認識機能をテーブルの背景に追加する必要があります。

[tableView.backgroundView addGestureRecognizer:singleTap];

これにより、次のものが隠されなくなります。

-(void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
于 2012-05-03T13:29:54.580 に答える
0

UITableviewが編集モードの場合、UITableView didSelectRowAtIndexPathは呼び出されません。したがって、同じことを処理するカスタム ジェスチャ イベントを作成するとします。

 -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
//cell design code goes here.
 UITapGestureRecognizer *doubleTapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleDoubleTap:)];
doubleTapGestureRecognizer.numberOfTapsRequired = 1;
//tapGestureRecognizer.delegate = self;
[cell addGestureRecognizer:doubleTapGestureRecognizer];
 return cell; 
} 
//Handle the click event 
-(void) handleDoubleTap:(UITapGestureRecognizer*)sender{ 
[self.view endEditing:YES]; 
UITableViewCell * cell =(UITableViewCell*) sender.view; 
//get the selected table indexpath. 
NSIndexPath * indexPath= [tblCart indexPathForCell:cell]; //to handle the scroll
tblCart scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionTop animated:YES]; 
NSLog(@"Comming"); 
}
于 2012-11-15T10:28:20.010 に答える