【发布时间】:2017-11-05 12:18:58
【问题描述】:
我有一个带有 inputAccessoryView 的 UICollectionViewController。在我呈现 UIViewController 之前,一切都很好,然后附件视图消失了。尝试获得基本的聊天应用程序功能。
我已经在集合视图中实现了:
override var inputAccessoryView: UIView? {
get {
return inputContainerView
}
}
override var canBecomeFirstResponder: Bool {
return true
}
override func becomeFirstResponder() -> Bool {
return true
}
正如多个其他线程中所建议的,我也调用(在集合视图中),
view.resignFirstResponder()
view.inputAccessoryView?.reloadInputViews()
view.becomeFirstResponder()
在关闭 UIViewController 但无济于事之后。 print(view.isFirstResponder) 仍然打印false。我已经在代码中的许多不同位置尝试了上述三行的几乎所有组合。我想我错过了一些简单的东西。
【问题讨论】:
-
有趣。我以为只有 textFields 和 textViews 有一个 inputAccessoryView ......无论如何:我认为 inputAccessoryView 在屏幕上它所属的视图必须是当前响应者......但是因为你提供了一个 viewControlle......它已经辞职了,现在你需要让它的视图再次成为 firstResponder ......我猜一个快速的解决方案是将
view.becomeFirstResponder()放在你的viewDidAppear中,以确保每次进入屏幕时 inputAccessoryView 都在那里。跨度> -
我在这里找到的,如果你真的感兴趣,请跳到15:00:youtube.com/watch?v=ky7YRh01by8谢谢你的建议!
-
我的建议有用吗?!
-
不幸的是它没有....出于某种原因,每当我调用 becomeFirstResponder 时,它都无法正常工作
-
更新:对您的建议稍作修改......我使用
viewDidAppear(我从未使用过)来展示 loginController 并且它有效。我从来不用打电话给view.becomeFirstResponder()我下面的计时器方法基本上完成了同样的事情,但这不那么老套和专业。非常感激。我会记住的
标签: ios uiviewcontroller swift3 xcode8 inputaccessoryview