关闭在 UINavigationController 堆栈中的 UIViewController 的键盘

Posted

技术标签:

【中文标题】关闭在 UINavigationController 堆栈中的 UIViewController 的键盘【英文标题】:Dismiss keyboard for UIViewController which is down in UINavigationController stack 【发布时间】:2016-02-15 13:30:18 【问题描述】:

我有一个带有 3 个标签(T1、T2、T3)的标签栏应用。

在 T1 中,我有一个类似 VC1 -> VC2 -> VC3 的导航堆栈。 VC1 有文本字段,显示一个键盘供用户输入。用户输入后,我不会在用户转到 VC2 再转到 VC3 之前关闭键盘。

然后用户转到 T3,在 T3 中做一些事情,应该自动将她/他直接切换到 T1 和 VC1。

当这种情况发生时,T1 中的 VC1 会显示键盘。如何在 VC1 中的键盘出现在屏幕上之前将其关闭?

附:我显然尝试了resignFirstResponder[view endEditing:YES],但它们似乎只有在 VC1 出现在屏幕上后才能正常工作(在 viewDidAppear 中工作,在 viewWillAppear 中不起作用)。

EDIT1:澄清:

    所有视图控制器都是以编程方式创建的,没有 nib 文件或情节提要。

    我可以在用户进入 VC2 之前重组导航或尝试隐藏键盘,但我对这个特定问题感兴趣,而不是涉及更改应用程序逻辑的解决方法。

    关闭键盘在viewDidAppear 中工作正常,但用户体验不是很好。

【问题讨论】:

为什么推T3时不关闭键盘? @heximal 正如我在澄清中所说,我有兴趣在不更改应用逻辑的情况下解决此问题。 【参考方案1】:

我不知道您是如何导航的,但请尝试在prepareForSegueunwindForSegue 或其他对您在VC1 中有意义的地方进行转换。然后以您之前提到的方式之一关闭键盘。

UIViewController Doc prepareForSegue

UIViewController Doc unwindForSegue

甚至在viewWillDisappear或VC1的其他视图事件方法中

【讨论】:

我可以这样做,但目前我不想更改应用程序的逻辑。

以上是关于关闭在 UINavigationController 堆栈中的 UIViewController 的键盘的主要内容,如果未能解决你的问题,请参考以下文章

在 UINavigationController 中设置时图像不显示

将 managedObjectContext 发送到 viewController 崩溃

ID:[...] 的 NSManagedObject 已失效

使用 UINavigationController 从另一个控制器更新或重新加载 UIViewController?

为啥我似乎必须在 iOS 应用程序委托中键入 window.rootViewController?

UINavigationController - 何时释放推送的视图控制器等