【问题标题】:InputAccessoryView not removedInputAccessoryView 未删除
【发布时间】:2019-03-26 17:09:43
【问题描述】:

我正在制作一个 iOS 应用程序,其中我使用 inputaccessoryviewUIViewController

问题是

控制器A

   class  ControllerA: UIViewController { 

    override var inputAccessoryView: UIView? {
        return saveView
    }

    override var canBecomeFirstResponder: Bool {
        return true
    }

    @IBAction func openVCB(_ sender: UIButton) {

    let controllerB = controllerB.instantiate(fromAppStoryboard: .main)
        let navigationController = UINavigationController(rootViewController: controllerB)
        navigationController.navigationBar.isTranslucent = false
        self.present(navigationController, animated: true)
    }
}

控制器 B

   class  ControllerB: UIViewController { 

    override var inputAccessoryView: UIView? {
        return nil
    }

    override var canBecomeFirstResponder: Bool {
        return false
    }

}

controller A 中,视图按预期工作,但在controller B 中,如果我打开键盘并关闭它,AccossoryView 它将是可见的,它应该不可见,有什么想法吗?

完整项目InpoutViewTest

【问题讨论】:

    标签: xcode keyboard inputaccessoryview swift4.2


    【解决方案1】:

    遵循这种方法:

    var shouldBecomeFirstResponder:Bool = false
    
    override var canBecomeFirstResponder: Bool {
    return shouldBecomeFirstResponder
    }
    

    不要忘记在viewWillDisappear 中将此标志设置为 false

     shouldBecomeFirstResponder = false
    

    【讨论】:

      【解决方案2】:

      我也遇到过这个问题。尝试将其放入您的 viewWillDisappear(_ animated: Bool) 函数中:

      override func viewWillDisappear(_ animated: Bool) {
         if let myInputAccessoryView = saveView {
            myInputAccessoryView.removeFromSuperview()
         }
      }
      

      它应该在转换到controller B 之前删除输入附件视图。只需记住在返回controller A 时将输入附件视图添加回来。如果您愿意,也可以尝试使用myInputAccessoryView.isHidden = true 而不是removeFromSuperview()

      【讨论】:

      • 我试了一下,还是一样的问题
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-12-22
      • 2014-08-27
      • 1970-01-01
      • 2021-09-22
      • 2011-05-01
      • 2011-09-03
      • 1970-01-01
      相关资源
      最近更新 更多