【发布时间】:2015-06-28 16:34:43
【问题描述】:
我正在开发一个具有键盘扩展的应用程序,在键盘扩展的某些用途中(例如:当我使用切换键盘按钮时)扩展正在通过 viewDidDisappear 并在在这种情况下,我知道我可以清理键盘,它的所有视图都被释放,内存被释放。在其他用途中(例如:当使用 Notes 应用程序并按下完成/返回按钮时)扩展正在通过 viewWillDisappear 而不是通过 viewDidDisappear,所以在这个情况下我没有清洁键盘,因为它没有达到我的清洁方法,因此它没有被释放。
在这一点上,我希望当我通过返回到笔记返回键盘时,我会收到之前的 UIInputViewController 以及我已经构建的视图。
不幸的是,此时 isViewLoaded() 方法返回 false 并且我的 UIInputViewController 再次通过 loadView 方法,因此再次构建所有再次查看,结果应用程序内存增长,直到某个时候我到达讨厌的 didReceiveMemoryWarning 方法回调。
我想以某种方式恢复我在首先初始化的 UIInputViewController 中为我的键盘创建的视图。有人知道这是否可能以及如何实现?
我正在研究 restorationIdentifier 来完成这项任务,如果我错了,请纠正我,但这是与普通 UIViewController 一起使用的,不能与UIInputViewController 因为不是我的 AppDelegate 负责启动它。
更新
从我所做的进一步研究中,我得出一个结论,无论您执行什么操作:
- 在 Notes 应用程序中使用完成/返回按钮。
- 切换到 Messages 应用并使用那里的键盘。
- 使用“切换键盘”按钮
和其他场景,UIInputViewController类总是通过init方法。
根据我对面向对象编程的理解,这意味着无论谁调用我的键盘来收割,都会使用构造函数来完成它,并且基本上会创建一个新的键盘实例。这意味着我永远不会在任何行为中第一次重新出现键盘时获得可用视图,并且我总是必须为新实例构建键盘视图并清理旧实例。 是这样吗?还是有办法保留 UIInputViewController 的视图?
【问题讨论】:
标签: ios swift uiview keyboard uiinputviewcontroller