我有一个UISearchBar,点击后会显示键盘。 但是,如果用户在显示键盘时按下主页按钮然后返回应用程序,则键盘仍然可见。 当应用程序关闭/进入后台时,如何隐藏键盘?
我在viewDidDisappear中尝试了以下内容:
[eventSearchBar resignFirstResponder];
[eventSearchBar endEditing:YES];
我也在appDidEnterBackground中的委托中尝试了这个:
[self.rootController.navigationController.view endEditing:YES];
这些都不起作用。
答案 0 :(得分:41)
你可以在appDelegate ....
中这样做- (void)applicationDidEnterBackground:(UIApplication *)application
{
[self.window endEditing:YES];
}
答案 1 :(得分:6)
Swift版本:
func applicationDidEnterBackground(application: UIApplication) {
window?.endEditing(true)
}
答案 2 :(得分: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];
答案 3 :(得分: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
,但仍然有键盘输入。
答案 4 :(得分:0)
swift 3.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)
}
答案 5 :(得分:0)
最好的方法是在AppDelegate上的applicationWillResignActive中放置窗口?.endEditing(true):
func applicationWillResignActive(_ application: UIApplication) {
window?.endEditing(true)
}