Search code examples
iosswiftuinavigationcontrolleruinavigationbaruinavigationitem

iOS navigationItem.rightBarButtonItem did not respone to its selector


I have a super class A and a subclassb B inherited from A. I wanna present B. When add navigationItem.rightBarButtonItem in class A , the selector did not response to its selector.

class A: UIViewController {

var saveNaviBtn: UIBarButtonItem = UIBarButtonItem(title: "save", style: .done, target: self, action: #selector(save))    

@objc func save() {
    dismiss(animated: true)
}

override func viewDidLoad() {
    super.viewDidLoad()
    self.navigationItem.rightBarButtonItem = saveNaviBtn

}
}
class B: A {

}

Solution

  • I think for some reason when the barButtonItem init, it's target self might not be finish inited. Do in this way:

    class A: UIViewController {
        var saveNaviBtn: UIBarButtonItem?
    
        override func viewDidLoad() {
            saveNaviBtn = UIBarButtonItem(title: "save", style: .done, target: self,      action: #selector(save))
            self.navigationItem.rightBarButtonItem = saveNaviBtn
        }
    }