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的主要内容,如果未能解决你的问题,请参考以下文章
没有看到 UIScrollView 上的 UITextField 时 resignFirstResponder
resignFirstResponder 没有按预期工作。每次按键时键盘都会弹出,而不是仅返回