UITextField - 当应用程序来自后台时键盘不隐藏
Posted
技术标签:
【中文标题】UITextField - 当应用程序来自后台时键盘不隐藏【英文标题】:UITextField - Keyboard not hiding when app comes from background 【发布时间】:2014-10-16 08:22:09 【问题描述】:在我的 ios 应用程序中,我在视图底部有 UITextfield。因此,当用户开始输入文本时,我将视图向上滑动,以便用户可以看到他们正在输入的内容。 输入文字时,视图向上移动,然后按主页按钮,应用程序将进入后台。 现在点击应用程序的图标,它将应用程序带到前台 现在我注意到视图回到了原始位置(X=0,Y=0),但键盘仍然可见。 应用进入前台时如何隐藏键盘。
我试图在 viewWillAppear 和 viewWillDisappear 中隐藏键盘。没用。
【问题讨论】:
为了清楚起见......当你在最后一句中说“隐藏键盘”时,你的意思是你在文本字段中调用了“resignFirstResponder”,对吗? 检查我更新的答案。 【参考方案1】: -(void)applicationDidEnterBackground:(UIApplication *)application
[self.window endEditing:YES];
********** 或 ************
当您来自后台时,您必须调用通知。当你从后台进入到前台然后调用appdelegate的这个方法。
- (void)applicationWillEnterForeground:(UIApplication *)application
如下所示触发其中的通知。
- (void)applicationWillEnterForeground:(UIApplication *)application
[[NSNotificationCenter defaultCenter] postNotificationName:@"HIDE" object:self];
在您的视图控制器中添加通知,如下所示
-(IBAction)HideKeyBard:(NSNotification *)noty
[txt resignFirstResponder];
- (void)viewDidLoad
[super viewDidLoad];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(HideKeyBard:) name:@"HIDE" object:nil];
输出:
【讨论】:
它运行良好,除了小问题。我的文本字段位于底部,因此我将视图向上移动。我的视图有一个背景图像。现在,当应用程序进入前台时,它会在底部显示空白(之前显示键盘的位置)【参考方案2】:最好的办法是把 window?.endEditing(true) 放在 AppDelegate 上的 applicationWillResignActive 中:
func applicationWillResignActive(_ application: UIApplication)
window?.endEditing(true)
希望对你有帮助
【讨论】:
【参考方案3】: 在您的 App Delegate 中有一个对 UIView * 的弱引用。 将其设置为您显示的任何文本字段(从任何视图控制器)。当应用程序进入前台时,只需调用视图的 resignFirstResponder 即可关闭键盘。此解决方案不关心应用程序进入后台时显示了哪个视图控制器。它只需要知道是否显示了文本视图,如果是,只需将其作为第一响应者即可。如果没有显示任何内容,则此变量将为 nil,并且只是一个空操作。
现在,即使将相同的视图控制器放在前面,用户也只需点击文本视图即可将键盘放回,这是完全可以接受的。
【讨论】:
以上是关于UITextField - 当应用程序来自后台时键盘不隐藏的主要内容,如果未能解决你的问题,请参考以下文章
删除时键“PRIMARY”的重复条目“0”(codeigniter)
如何在没有按钮的情况下在 UITextField 中显示来自 UIDataPicker 的值
UITextField, becomeFirstResponder, resignFirstResponder