我在我的应用中遇到了一个错误,即第一个视图控制器中的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中,因此我不了解它如何能够转移到另一个屏幕。
答案 0 :(得分:0)
所以这是一个难以解决的问题,但我最终想出了问题。
所以问题是方法find "$code_path" -type f -name '*.h' -o -name '*.c' -o -name '*.cpp' \
-exec file {} + | awk '!/broken/ {print $1}'
。如果我们按如下方式设计故事板:
canBecomeFirstResponder
当我们转到FirstViewController -(show)-> SecondViewController -(show )-> ThirdViewController
时,iOS会询问ThirdViewController
是否可以成为第一响应者。如果FirstViewController
返回true,则canBecomeFirstResponder
的输入附件视图将显示在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)
}
...
}
答案 1 :(得分:0)
如果@ entelect-ca假设是正确的 - 我宁愿检查FirstViewController
控制器是否可见。
此外,没有开箱即用的方法来检查控制器是否可见(特别是在处理选项卡时)。因此,您可以将visible
属性添加到视图控制器中:
@property BOOL visible;
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
self.visible = true;
}
- (void)viewDidDisappear:(BOOL)animated {
[super viewDidDisappear:animated];
self.visible = false;
}
- (BOOL)canBecomeFirstResponder {
return self.visible;
}