16

クリックするとキーボードを表示するUISearchBarがあります。ただし、キーボードが表示されているときにユーザーがホームボタンを押してからアプリに戻ると、キーボードは引き続き表示されます。アプリを閉じたりバックグラウンドに入ったりしたときにキーボードを非表示にするにはどうすればよいですか?

viewDidDisappearで次のことを試しました。

[eventSearchBar resignFirstResponder];

[eventSearchBar endEditing:YES];

appDidEnterBackgroundのデリゲートでもこれを試しました。

[self.rootController.navigationController.view endEditing:YES];

これらはどれも機能しませんでした。

4

6 に答える 6

43

appDelegateでこれを行うことができます...。

- (void)applicationDidEnterBackground:(UIApplication *)application
{
    [self.window endEditing:YES];
}
于 2012-08-18T14:23:09.787 に答える
7

これの迅速なバージョン:

func applicationDidEnterBackground(application: UIApplication) {
    window?.endEditing(true)
}
于 2015-09-07T13:37:12.253 に答える
4

ビューコントローラで、たとえばinitメソッドで、:に登録しますUIApplicationWillResignActiveNotification

[[NSNotificationCenter defaultCenter] addObserver:self 
    selector:@selector(willResignActive:)
    name:UIApplicationWillResignActiveNotification
    object:nil];

アプリがバックグラウンドに移行したら、検索ディスプレイコントローラーを非アクティブにします。これにより、検索フィールドからフォーカスが削除され、キーボードが非表示になります。

- (void)willResignActive:(NSNotification *)note
{
    self.searchDisplayController.active = NO;

    // Alternatively, if you only want to hide the keyboard:
    // [self.searchDisplayController.searchBar resignFirstResponder];
}

そして、deallocメソッドでオブザーバーを削除することを忘れないでください。

[[NSNotificationCenter defaultCenter] removeObserver:self
    name:UIApplicationWillResignActiveNotification
    object:nil];
于 2012-08-18T14:25:22.307 に答える
0

私はすべての標準的な方法が散発的に失敗しました。これまでのところ、これが私が確かな結果を得た唯一の方法です。

最上位のコントローラー。

- (void)viewDidLoad {
    [super viewDidLoad];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(willResignActiveNotification:) name:UIApplicationWillResignActiveNotification object:nil];
}

-(void) willResignActiveNotification:(NSNotification*) vNotification {
    [[UIApplication sharedApplication] sendAction:@selector(resignFirstResponder) to:nil from:nil forEvent:nil];
    [self setEditing:NO];
}

テキストフィールドが応答しなくなっresignFirstResponderたりendEditing、キーボードが上がったままになるという奇妙なケースがあります。

于 2015-04-28T19:25:19.207 に答える
0

swift3.2バージョンのソリューション

    override func viewDidLoad() {
        super.viewDidLoad()
        NotificationCenter.default.addObserver(self, selector: #selector(hideTextField), name: NSNotification.Name.UIApplicationWillResignActive, object: nil)
    }

    deinit {
        NotificationCenter.default.removeObserver(self)
    }

    func hideTextField(){
        eventSearchBar.endEditing(true)
    }
于 2018-02-09T16:04:18.483 に答える
0

最良の方法は、AppDelegateのapplicationWillResignActiveにwindow?.endEditing(true)を配置することです。

func applicationWillResignActive(_ application: UIApplication) {
    window?.endEditing(true)
}
于 2018-05-01T06:23:51.720 に答える