resignFirstResponder 没有在 iPad 中隐藏 UIkeyboard

Posted

技术标签:

【中文标题】resignFirstResponder 没有在 iPad 中隐藏 UIkeyboard【英文标题】:resignFirstResponder not hiding UIkeyboard in iPad 【发布时间】:2012-08-01 11:26:49 【问题描述】:

我有一个 iPad 应用程序,其中 resignFirstResponder 似乎无法正常工作。 我尝试了很多解决方案。我只是从 firstResponder 对象的实例调用 resign first responder,但键盘仍保留在屏幕上。然后我尝试通过迭代所有窗口来获取第一响应者的实例,然后我从该实例调用 resignFirstResponder。

我还尝试为以下方法创建UIViewController 的类别。

  - (BOOL)disablesAutomaticKeyboardDismissal
    
         return NO;
    

但是这个解决方案也不适合我。而且这个键盘问题存在于应用程序的所有文本字段中,不仅针对某些特定的文本字段。

更新: 在应用程序的不同部分,我为此目的使用不同的代码。这是代码

- (void)textFieldDidEndEditing:(UITextField *)mtextField
 
 [mtextField resignFirstResponder]; this one is not required but I have just write   it here.
 

- (BOOL)textField:(UITextField *)theTextField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string

if([string hasSuffix:@"\n"])

    [theTextField resignFirstResponder];
    return NO;

return YES;

更新:当我尝试在模拟器中运行应用程序时,有时resignFirstResponder 可以正常工作,但即使在模拟器中也不是每次启动。

【问题讨论】:

不看源头就很难猜出发生了什么。您是否尝试过在视图控制器的***视图上调用 endEditing 我已经尝试在 viewcontroller 的 view 属性上进行 endEditing。 如果你想让键盘关闭,disablesAutomaticKeyboardDismissal 不应该返回 NO 吗? 好的,disablesAutomaticKeyboardDismissal 应该返回 NO。那是打字的错误。 【参考方案1】:

隐藏键盘最简单最好的方法是使用

[self.view endEditing:YES];

并确保您设置了适当的文本字段委托

【讨论】:

这个方法试过了,还是不行,键盘还在屏幕上。 您的字段是否在笔尖内的单独视图中?如果有,请致电[thatViewOutlet endEditing:YES];【参考方案2】:

如果你想让键盘在你按下回车键的时候退出,你需要使用:

- (BOOL)textFieldShouldReturn:(UITextField *)textField


[textField resignFirstResponder];  
return YES;

然后 textFieldDidEndEditing 被调用。

【讨论】:

【参考方案3】:

我得到了这个问题的解决方案。实际上,苹果可可 API 似乎有一些变化。在我的应用程序中,我有一个UIAlertView,我们曾经显示它以显示某些操作正在进行,用户应该等待完成它。为此,我在应用中使用的代码是

- (void)displayAlertView
   
     UIAlertView *alertView = creating the object;
     UIActivityIndicatorView *activityIndicator= creating the object;
     [alertView addSubview:activityIndicator];
     [activityIndicator startAnimating];
     [alertView show];
     [alertView release];
    

-(void)didPresentAlertView:(UIAlertView *)alertView
 
      [alertView dismissWithClickedButtonIndex:0 animated:NO];
 

当我在我的应用程序中使用以下代码时,问题得到解决

  -(void)didPresentAlertView:(UIAlertView *)alertView
 
      [self performSelector:@selector(dismissView:) withObject:alertView afterDelay:0.0];

 

  -(void)dismissView:(UIAlertView*)alertView
 
      [alertView dismissWithClickedButtonIndex:0 animated:NO];
 

我认为UIAlertView 出现了一些问题,因为在辞去第一响应者的职务时键盘没有隐藏。

【讨论】:

【参考方案4】:

首先,您不会在 Objective-C 中调用方法,而是向对象发送消息。

UIView 不是应该发送消息resignFirstResponder 的人。将您的 UITextField 作为属性 - 我们称其为 myTextField。你应该使用这个:

[self.myTextField resignFirstResponder];

【讨论】:

如果我发送消息或只是调用目标 C 方法,它会产生什么不同。我也尝试过通过属性调用它。 这不是创造差异。我只是在谈论语言是如何工作的。您(我也经常这样做)所说的“调用方法”实际上是发送消息。很抱歉我的回答没有帮助

以上是关于resignFirstResponder 没有在 iPad 中隐藏 UIkeyboard的主要内容,如果未能解决你的问题,请参考以下文章

resignFirstResponder 没有按预期工作

没有看到 UIScrollView 上的 UITextField 时 resignFirstResponder

resignFirstResponder 没有按预期工作。每次按键时键盘都会弹出,而不是仅返回

resignFirstResponder 不关闭键盘

为啥必须在主队列上异步调用 resignFirstResponder() 来关闭键盘

UITextField - resignFirstResponder 查询