我在应用中遇到了一个错误,尽管我覆盖了输入附件视图,但第一个视图控制器中的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/

10-12 00:08
查看更多