我在应用中遇到了一个错误,尽管我覆盖了输入附件视图,但第一个视图控制器中的UIToolbar出现在第三个视图控制器中。
第一视图控制器:
class FirstViewController: BaseViewController {
@IBOutlet weak var toolbar: UIToolbar!
override var inputAccessoryView: UIView? {
return toolbar
}
...
第二个视图控制器:
class SecondViewController: BaseViewController {
override var inputAccessoryView: UIView? {
return nil
}
...
第三视图控制器:
class ThirdViewController: BaseViewController {
override var inputAccessoryView: UIView? {
return nil
}
...
我不确定是什么原因导致工具栏出现在第二个视图控制器中。这些视图控制器没有嵌入在UINavigationController中,所以我不明白它如何可以继承到另一个屏幕。
最佳答案
所以这是一个很难解决的问题,但我最终找到了问题。
因此,问题是canBecomeFirstResponder
方法。如果我们按以下方式设计故事板:FirstViewController -(show)-> SecondViewController -(show )-> ThirdViewController
当我们选择ThirdViewController
时,iOS会询问FirstViewController
是否可以成为第一响应者。如果canBecomeFirstResponder
返回true,则FirstViewController
的输入附件视图将出现在ThirdViewController
中。
不幸的是,该解决方案有点笨拙,但这是我目前能想到的唯一解决方案。
基本视图控制器:
class BaseViewController: UIViewController {
var shouldBecomeFirstResponder: Bool = false
override var canBecomeFirstResponder: Bool {
return shouldBecomeFirstResponder
}
...
}
第一视图控制器:
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)
}
...
}
第二个视图控制器:
class SecondViewController: BaseViewController {
override func viewDidLoad() {
super.viewDidLoad()
shouldBecomeFirstResponder = false
}
...
@IBAction didTap() {
performSegue(withIdentifier: "showThird", sender: self)
}
...
}
第三视图控制器:
class ThirdViewController: BaseViewController {
...
}
关于ios - 来自一个 View Controller 的输入附件 View 错误地出现在另一个 View Controller 中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44846328/