UIBarbuttonItem 关闭 UIVIewcontroller

God*_*her 1 ios swift

我给 UIViewController 添加了一个扩展来添加一个关闭按钮

    extension UIViewController {
      func addCloseButton() {
            let button = UIBarButtonItem(image: #imageLiteral(resourceName: "bar_close"), 
                                         landscapeImagePhone: nil,
                                         style: .done,
                                         target: self, 
                                         action: #selector(UIViewController.dismiss(animated:completion:)))
            navigationItem.leftBarButtonItem = button
      }
    } 
Run Code Online (Sandbox Code Playgroud)

当我点击栏按钮时,我会直接崩溃到 AppDelegate。任何提示?似乎与选择器有关。

tai*_*lor 5

你不能在这里使用dismiss(animated:completion:)作为选择器,因为它需要两个参数 bool 和closure 和 bar button action 将 args 作为 UIBarButtonItem 传递,这会导致应用程序崩溃。所以像这样改变你的代码。

extension UIViewController {
    func addCloseButton() {
        let button = UIBarButtonItem(image: #imageLiteral(resourceName: "rightgreen"),
                                 landscapeImagePhone: nil,
                                 style: .done,
                                 target: self,
                                 action: #selector(onClose))
        navigationItem.leftBarButtonItem = button
    }

    @objc func onClose(){
        self.dismiss(animated: true, completion: nil)
    }
}
Run Code Online (Sandbox Code Playgroud)