【问题标题】:UITextField - Keyboard not hiding when app comes from backgroundUITextField - 当应用程序来自后台时键盘不隐藏
【发布时间】:2014-10-16 08:22:09
【问题描述】:

在我的 iOS 应用程序中,我在视图底部有 UITextfield。因此,当用户开始输入文本时,我将视图向上滑动,以便用户可以看到他们正在输入的内容。
输入文字时,视图向上移动,然后按主页按钮,应用程序将进入后台。
现在点击应用程序的图标,它将应用程序带到前台
现在我注意到视图回到了原始位置(X=0,Y=0),但键盘仍然可见。
应用进入前台时如何隐藏键盘。

我试图在 viewWillAppear 和 viewWillDisappear 中隐藏键盘。没用。

【问题讨论】:

  • 为了清楚起见......当你在最后一句中说“隐藏键盘”时,你的意思是你在文本字段中调用了“resignFirstResponder”,对吗?
  • 检查我更新的答案。

标签: ios background uitextfield


【解决方案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,并且只是一个空操作。

    现在,即使将相同的视图控制器放在前面,用户也只需点击文本视图即可将键盘放回,这是完全可以接受的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-23
      • 1970-01-01
      • 1970-01-01
      • 2015-01-17
      • 1970-01-01
      • 2013-10-24
      相关资源
      最近更新 更多