SWIFT 3、Eureka:使用导航控制器时,不调用keyboardWillShow回调

Posted

技术标签:

【中文标题】SWIFT 3、Eureka:使用导航控制器时,不调用keyboardWillShow回调【英文标题】:SWIFT 3, Eureka: When using a navigation controller, the keyboardWillShow callback is not called 【发布时间】:2017-05-16 06:32:14 【问题描述】:

场景

NavigationController 是 TabBarController 的根控制器 TabBarController 有 2 个 UIViewControllers 一个 UIViewController 具有呈现另一个 UIViewController 的功能 呈现的 UIVIewController 具有 StackView 实例化 FormController 的子类(例如:FormVC)并作为子视图添加到 Stack

问题

FormVC 的keyboardWillShow 函数没有被调用。键盘实际上将输入添加到行中,但不会发生自动滚动

这只是 Eureka 中的问题,还是使用导航控制器的 pushViewController 的问题?

【问题讨论】:

需要测试是否可以在推送时添加Notification Observer:***.com/questions/37825327/… 发布到 Eureka 问题列表:github.com/xmartlabs/Eureka/issues/1045 因为 FormVC 只是在另一个 VC 中实例化,似乎有些东西丢失了。当在 ContainerView 的 Storyboard 中设置为 ViewController 类类型时,设法让它正常工作。 【参考方案1】:

回答

根据问题中的评论,使用 FormVC 的正确方法是使用容器。

这是对Miguel Revetria - source,github的一个很好的解释:

您好厨师长,您的方法的问题是 FormViewController 生命周期没有被处理,因为你没有 将其添加到视图控制器层次结构中。其实你只是 将其视图添加到您的视图之一。

函数keyboardWillShow 没有被调用,因为 FormViewController 将此观察者添加到通知中 Notification.Name.UIKeyboardWillShow 来自函数viewWillAppear, 在你的情况下没有被调用。像这样,其他东西可能不会 正常工作,因为视图控制器生命周期没有 处理。

这不是FormViewController 的使用方式。使用它 这种方式最终可能会导致您遇到的不良行为。 在其他视图中嵌入FormViewController 的正确方法 控制器的视图是将其添加为子视图控制器。看到这个 苹果指南了解更多信息Implementing a Container 查看 控制器。此外,在情节提要中,您可以使用Container View

问候

【讨论】:

控制台上仍然收到此消息可能意味着我需要添加keyboardWillHide 通知传递:Reading from private effective user settings.

以上是关于SWIFT 3、Eureka:使用导航控制器时,不调用keyboardWillShow回调的主要内容,如果未能解决你的问题,请参考以下文章

使用Swift 3单击collectionView单元格内的项目时如何导航另一个视图控制器

导航不出现 Xcode 8.1 iOS 10 Swift 3

在 Swift 3 中访问孩子时,父母的导航栏变亮

在 ios swift 中导航到其他屏幕时,不鼓励在分离的视图控制器上显示视图控制器

使用 Swift 3 的导航栏背景颜色灯

IOS Swift CNContactViewController 导航栏不显示 UINavigation 控制器