如何显示导航左栏按钮?

How to show Navigation Left bar button?

使用 Xcode 版本 9.3 开发 iOS 应用程序,Swift。

导航左栏按钮没有出现。你能告诉我如何显示左栏按钮吗?

当我用同样的代码尝试右边的按钮时,显示没有任何问题。

代码和故事板如下

第一个TableView的代码

import UIKit

class TableViewController: UITableViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        let naviButton = UIBarButtonItem(title: "naviButton", style: UIBarButtonItemStyle.plain, target: self, action: #selector(Tapped))

        // Left bar button does not appear
        self.navigationItem.leftBarButtonItem = naviButton

        // Right bar button do appear
        self.navigationItem.rightBarButtonItem = naviButton

        // Uncomment the following line to preserve selection between presentations
        // self.clearsSelectionOnViewWillAppear = false

        // Uncomment the following line to display an Edit button in the navigation bar for this view controller.
        // self.navigationItem.rightBarButtonItem = self.editButtonItem
    }

    @objc func Tapped() {
        print("Tapped")
    }

...

故事板

模拟器

You can not place same button twice in UINavigationBar. So create 2 separate button and then assign them to leftbarButton and rightbarButton:

override func viewDidLoad() {
    super.viewDidLoad()

    let leftNaviButton = UIBarButtonItem(title: "lNaviButton", style: UIBarButtonItemStyle.plain, target: self, action: #selector(Tapped1))
    self.navigationItem.leftBarButtonItem = leftNaviButton

    let rightNaviButton = UIBarButtonItem(title: "rNaviButton", style: UIBarButtonItemStyle.plain, target: self, action: #selector(Tapped2))
    self.navigationItem.rightBarButtonItem = rightNaviButton
}

@objc func Tapped1() {
    print("Tapped1")
}

@objc func Tapped2() {
    print("Tapped2")
}

您不能将相同的视图添加到 UI 两次。如果您创建单个 UIBarButtonItem,您可以将其添加为左侧导航项或右侧导航项,但不能同时添加。所以如果你想两边都有项目,只需创建另一个:

override func viewDidLoad() {
    super.viewDidLoad()

    let leftNaviButton = UIBarButtonItem(title: "naviButton", style: UIBarButtonItemStyle.plain, target: self, action: #selector(Tapped))

    // Left bar button does not appear
    self.navigationItem.leftBarButtonItem = leftNaviButton

    let rightNaviButton = UIBarButtonItem(title: "naviButton", style: UIBarButtonItemStyle.plain, target: self, action: #selector(Tapped))
    // Right bar button do appear
    self.navigationItem.rightBarButtonItem = rightNaviButton

}

正如我在评论中建议的那样,您的问题与您为 self.navigationItem.rightBarButtonItemself.navigationItem.leftBarButtonItem 设置相同 UIBarButtonItem 的事实有关,您需要创建两个 UIBarButtonItem 并分配一个给右边,另一个给左边,我想你知道该怎么做 ;)

您可以像这样为 UIButton 创建一个扩展

extension UIButton {
    class func addBarButton(tittle:String,_ target: Any, action: Selector) -> UIBarButtonItem{
        let button = UIButton(type: .system)
        button.setTitle(tittle, for: .normal)
        button.addTarget(target, action: action, for: .touchUpInside)
        return UIBarButtonItem(customView: button)
    }    
}

而你的主控制器只需要写下面的代码

  self.navigationItem.rightBarButtonItem = UIButton.addBarButton(tittle: "RNaviButton", self, action: #selector(Tapped1))
  self.navigationItem.leftBarButtonItem = UIButton.addBarButton(tittle: "LNaviButton", self, action: #selector(Tapped2))

和按钮的操作方法

@objc func Tapped1() {
    print("Tapped1")
}
@objc func Tapped2() {
    print("Tapped2")
}

如果你想对两个按钮执行相同的操作,你也可以在两个按钮操作中传递相同的操作。