2

私はストーリーボードのシンプルなアプリ (コントローラーは 1 つだけ) で作成しました。コントローラー内に次のような機能を追加しました

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    [self.name resignFirstResponder];
    [self.number resignFirstResponder];

    // I have tried with and without this line but doesn't work
    [self.scrollView resignFirstResponder];
}

(name、number は UITextField の Outlet、scrollView は UIScrollView の Outlet)。これらのテキスト フィールドのいずれかをクリックすると、キーボードがポップアップ表示されますが、入力が終了してもキーボードを非表示にすることはできません。(以前のバージョンでは、テキスト フィールドをクリックしたときにスクロールビューとキーボードが非表示になりませんでした)。キーボードをデフォルトのアプリのように動作させる方法、非表示にする方法は?

4

2 に答える 2

3

キーボードから離れてタップして、正しく閉じたいと思っていると思いますか? これを行うだけです:

 UITapGestureRecognizer *myTapz = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(userTapped)];
    myTapz.numberOfTapsRequired=1;
    myTapz.cancelsTouchesInView=NO;
    [self.view addGestureRecognizer:myTapz];//or do self.WhateverYourOtherViewIsCalled..tableview? scrollView?
    [myTapz release];

そして、セレクターで:

-(IBAction)userTapped
{
  [whateverYourTextFieldIsCalled resignFirstResponder];
}
于 2013-02-20T03:57:11.907 に答える
2

ビューコントローラーで:

[self.view endEditing:YES];

これにより、ファーストレスポンダがどのフィールドであっても、キーボードが閉じられます。いくつかの例外があると思いますが、あなたがやっていることはうまくいくはずです。

またtouchesBegan、UIViewController メソッドではなく、UIView メソッドです。UIScrollView 内に配置している場合、スクロール ビューの panGestureRecognizer は touchesBegan が呼び出されないようにします。また、touchesBegan やその他の touches メソッドをオーバーライドするときは、通常、super も呼び出す必要があります。

ジェスチャ認識エンジンを作成するための ttarules の提案は、タッチを検出するための最良の方法です。ビュー内で touchesBegan を使用できますが、他のジェスチャ レコグナイザーが呼び出されないようにすることができることを知っておいてください (セッション 121 - WWDC 2010 の高度なジェスチャ認識を参照)。

endEditing他のフィールドを追加した後でも機能するため、キーボードを閉じる最良の方法です。

于 2013-02-20T03:50:46.007 に答える