ios - 来自一个 View Controller 的输入附件 View 错误地出现在另一个 View Controller 中

标签 ios swift

我在我的应用程序中遇到了一个错误,尽管我覆盖了输入附件 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/

相关文章:

ios - 文本字段单击与拖动

ios - Swift 通过枚举理解泛型

android - 触摸设备(iOS、Android)

objective-c - 如何在收到点击次数后显示警报 View

ios - 如何为与 uiviewcontroller 一起工作的方法创建一个类

ios - 如何更改UITableViewHeaderFooterView的textLabel的高度?

swift - 快速将非常大的十进制数转换为十六进制数

ios - 我想在单个 TableView 中使用 nib 中的两个不同的自定义单元格。两个原型(prototype)电池具有不同的高度

ios - 隐藏 UIButton 而不仅仅是移除可见性

ios - 使用 Swift 5.0.1 编译的模块无法被 Swift 5.1 编译器导入