关闭在 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】:我不知道您是如何导航的,但请尝试在prepareForSegue
或unwindForSegue
或其他对您在VC1 中有意义的地方进行转换。然后以您之前提到的方式之一关闭键盘。
UIViewController Doc prepareForSegue
UIViewController Doc unwindForSegue
甚至在viewWillDisappear
或VC1的其他视图事件方法中
【讨论】:
我可以这样做,但目前我不想更改应用程序的逻辑。以上是关于关闭在 UINavigationController 堆栈中的 UIViewController 的键盘的主要内容,如果未能解决你的问题,请参考以下文章
在 UINavigationController 中设置时图像不显示
将 managedObjectContext 发送到 viewController 崩溃
ID:[...] 的 NSManagedObject 已失效
使用 UINavigationController 从另一个控制器更新或重新加载 UIViewController?