从屏幕上删除键盘而不调用resignFirstResponder

我在UIWindow上添加了一个自定义视图( NotifyView ),带有一个关闭按钮(从UIWindow中删除它)。 当PUSH通知进入didReceiveRemoteNotification时会添加此视图,有几种情况我可以在任何屏幕上,并且我的键盘通过UITextfield / UITextview 。 在此阶段,如果推NotifyView则会在键盘后面的UIWindow上添加NotifyView 。 我想在收到PUSH后重新签名键盘,所以我可以:

  • 使用NSNotificaitonCenter发布通知以重新firstResponder所有文本字段/ firstResponder (如果有人是firstResponder )。 为此,我必须保持活动指针指向所有控制器中当前活动的textfield / textview。

  • 在AppDelegate中创建一个变量,并为其和PUSH分配活动的文本字段/ resignFirstResponder ,并在PUSH上为resignFirstResponder

这两个解决方案都需要更改所有控制器的代码,我正在寻找更通用的东西,如:

  • 有没有什么方法可以简单地在接收PUSH时从屏幕上移除键盘
  • 或者我可以获取应用程序的当前firstResponder并明确地重新签名。

这些可能是通用解决方案。

如果有人可以促进这个思考过程或者有人对此案例有任何直接的解决方案,那将是非常有帮助的。

您可以使用以下方法

 [[[UIApplication sharedApplication] keyWindow] endEditing:YES] 

尝试这个,对我来说它工作正常[yourView endEditing:YES]

问题是,当你想要回馈焦点时。

我已经实现了监听每个文本字段和缓存,这是最新的。 只有那个(在推送中)在该恢复状态之后才辞职,需要专注于此。

在委托方法中尝试这个…

 - (BOOL)textFieldShouldBeginEditing:(UITextField *)textField { [self.view endEditing:YES]; // added this in for case when keyboard was already on screen [self editStartDate:textField]; return NO; }