我在我的应用程序中遇到了一个错误,尽管我覆盖了输入附件 View ,但第一个 View Controller 中的 UIToolbar 出现在第三个 View Controller 中。
第一个 View Controller :
class FirstViewController: BaseViewController {
@IBOutlet weak var toolbar: UIToolbar!
override var inputAccessoryView: UIView? {
return toolbar
}
...
第二个 View Controller :
class SecondViewController: BaseViewController {
override var inputAccessoryView: UIView? {
return nil
}
...
第三 View Controller :
class ThirdViewController: BaseViewController {
override var inputAccessoryView: UIView? {
return nil
}
...
我不确定是什么导致工具栏出现在第二个 View Controller 中。这些 View Controller 没有嵌入到 UINavigationController 中,所以我不明白它如何转移到另一个屏幕。
最佳答案
所以这是一个很难解决的问题,但我最终找到了问题。
所以问题是方法canBecomeFirstResponder
。如果我们按如下方式设计 Storyboard:
FirstViewController -(显示)-> SecondViewController -(显示)-> ThirdViewController
当我们转到 ThirdViewController
时,iOS 会询问 FirstViewController
它是否可以成为第一响应者。如果canBecomeFirstResponder
返回true,那么FirstViewController
的input accessory view就会出现在ThirdViewController
中。
不幸的是,这个解决方案有点老套,但这是我目前能想到的唯一解决方案。
基础 View Controller :
class BaseViewController: UIViewController {
var shouldBecomeFirstResponder: Bool = false
override var canBecomeFirstResponder: Bool {
return shouldBecomeFirstResponder
}
...
}
第一个 View Controller :
class FirstViewController: BaseViewController {
@IBOutlet weak var toolbar: UIToolbar!
override func viewDidLoad() {
super.viewDidLoad()
shouldBecomeFirstResponder = true
}
override var inputAccessoryView: UIView? {
return toolbar
}
@IBAction didTap() {
shouldBecomeFirstResponder = false
performSegue(withIdentifier: "showSecond", sender: self)
}
...
}
第二个 View Controller :
class SecondViewController: BaseViewController {
override func viewDidLoad() {
super.viewDidLoad()
shouldBecomeFirstResponder = false
}
...
@IBAction didTap() {
performSegue(withIdentifier: "showThird", sender: self)
}
...
}
第三 View Controller :
class ThirdViewController: BaseViewController {
...
}
关于ios - 来自一个 View Controller 的输入附件 View 错误地出现在另一个 View Controller 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44846328/