Swift 3.0 Adding a Right Button to Navigation Bar

前端 未结 6 903
夕颜
夕颜 2020-12-29 04:00

I have added a navigation bar to the top of a view controller. I am trying to control whether a button is visible based a condition, but I am having trouble adding the butto

相关标签:
6条回答
  • 2020-12-29 04:13

    It’s simple. Put this line of code to the viewDidLoad:

    self.navigationItem.rightBarButtonItem = UIBarButtonItem(title: "test", style: .done, target: self, action: #selector(addTapped))
    

    Updated for Swift 4 or later:

    A custom function:

    @objc func action(sender: UIBarButtonItem) {
        // Function body goes here
    }
    

    (Custom) Right bar button item:

    self.navigationItem.rightBarButtonItem = UIBarButtonItem.init(title: "some_text", style: .done, target: self, action: #selector(self.action(sender:)))
    

    (Custom) Left bar button item:

    self.navigationItem.leftBarButtonItem = UIBarButtonItem.init(title: "some_text", style: .done, target: self, action: #selector(self.action(sender:)))
    

    Also you can add a system bar button items something like this: UIBarButtonItem.SystemItem Defines system-supplied images for bar button items: .add, .done, .cancel, .edit, .save, .compose, .reply, .organize and more.

    (System) Right bar button item:

    self.navigationItem.rightBarButtonItem = UIBarButtonItem.init(barButtonSystemItem: UIBarButtonItem.SystemItem.add, target: self, action: #selector(self.action(sender:)))
    

    (System) Left bar button item:

    self.navigationItem.leftBarButtonItem = UIBarButtonItem.init(barButtonSystemItem: UIBarButtonItem.SystemItem.add, target: self, action: #selector(self.action(sender:)))
    
    0 讨论(0)
  • 2020-12-29 04:13

    tested in Xcode 10.2, swift 5.0; First, I have have embedded my ViewController in UINavigationController in IB. Then in ViewDidLoad include these lines

    self.title = "orange"
     self.navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .add, target: self, action: #selector(changeLayout)).
    

    Note - accessing title, or adding button through navigation controller did not work. For example : setting title - Self.navigationcontroller.navigationItem.title did not work ,

    0 讨论(0)
  • 2020-12-29 04:19

    Swift 4.2;

    Add viewController

    override func viewDidLoad() {
            super.viewDidLoad()
            self.addNavigationBarButton(imageName: "ic_back", direction:.left)
     }
    

    Add Class your API or Utility Class

    public func addNavigationBarButton(imageName:String,direction:direction){
        var image = UIImage(named: imageName)
        image = image?.withRenderingMode(.alwaysOriginal)
        switch direction {
        case .left:
            self.navigationItem.leftBarButtonItem = UIBarButtonItem(image: image, style:.plain, target: nil, action: #selector(goBack))
        case .right:
            self.navigationItem.rightBarButtonItem = UIBarButtonItem(image: image, style:.plain, target: nil, action: #selector(goBack))
        }
    }
    
    @objc public func goBack() {
        self.navigationController?.popViewController(animated: true)
    }
    
    public enum direction {
        case right
        case left
    }
    
    0 讨论(0)
  • 2020-12-29 04:25

    Firstly, you need to connect you navigation bar to an IBOutlet so that you can refer to it in your code. After that, this code should work:

        let navigationItem = UINavigationItem(title: "Title")
        navigationItem.rightBarButtonItem = self.addButton
        navigationItem.hidesBackButton = true
        self.navigationBar.pushItem(navigationItem, animated: false)
    
    0 讨论(0)
  • 2020-12-29 04:26

    You say you added a UINavigationBar to your view controller via storyboard, but looking at the code you provided there is no outlet connection to your navigation bar in IB.

    In order to access self.navigationItem your view controller must be embedded in a UINavigationController or be part of a hierarchy which is. Unless you have a need for a custom navigation bar on an individual view controller, I suggest removing that from Interface Builder, then making sure either the view controller in question is embedded in a UINavigationController or it is being pushed onto the navigation stack from another controller which is embedded in a navigation controller and then you should see your UIBarButtonItem.

    0 讨论(0)
  • 2020-12-29 04:34
    let rightBarButtonItem = UIBarButtonItem.init(image: UIImage(named: "EditImage"), style: .done, target: self, action: #selector(ViewController.call_Method))
    
    self.navigationItem.rightBarButtonItem = rightBarButtonItem
    
    0 讨论(0)
提交回复
热议问题