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

时间:2013-04-26 08:22:19

标签: iphone ios objective-c ipad ios5

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

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

  • 在AppDelegate中创建一个变量,并将活动的文本域/文本视图分配给它,并在PUSH上分配,并将resignFirstResponder分配给PUSH。

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

  • 在接收PUSH时,我可以通过任何方式简单地从屏幕上移除键盘
  • 或者我可以获取应用程序的当前firstResponder并明确地重新签名。

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

如果有人可以为这个思考过程提供便利,或者有人立即解决这个问题,那将会非常有用。

4 个答案:

答案 0 :(得分:7)

您可以使用以下方法

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

答案 1 :(得分:4)

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

答案 2 :(得分:0)

问题在于,当你想要回归焦点时。

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

答案 3 :(得分:0)

在委托方法中试试......

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