【问题标题】:Add a left bar button item to UINavigationController when no back button is present当没有返回按钮时,向 UINavigationController 添加一个左栏按钮项
【发布时间】:2014-03-20 07:04:07
【问题描述】:

我想在我的导航栏中添加一个默认的左栏按钮项。它应该只在 UINavigationController 没有提供后退按钮时显示。

最好的方法是什么?

【问题讨论】:

  • 你的问题是最好的方法。如果没有返回按钮,请添加您的左按钮。

标签: ios iphone objective-c uiviewcontroller uinavigationcontroller


【解决方案1】:
- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated {
    if(navigationController.viewControllers.count != 1) { // not the root controller - show back button instead
        return;
    }
    UIBarButtonItem *menuItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemOrganize
                                                                              target:self
                                                                              action:@selector(menuItemSelected:)];   
    [viewController.navigationItem setLeftBarButtonItem:menuItem]; 
}

【讨论】:

  • 这是来自 UINavigationController 的委托?
【解决方案2】:

Swift 代码添加leftBarButtonItem...

    let leftMenuItem = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.Done, target: self, action: "leftMenuItemSelected:");
    self.navigationItem.setLeftBarButtonItem(leftMenuItem, animated: false);

更新

适用于 Swift 4 及更高版本

    let leftMenuItem = UIBarButtonItem(barButtonSystemItem: .done, target: self, action: #selector(leftMenuItemSelected(_:)))
    self.navigationItem.setLeftBarButton(leftMenuItem, animated: false);

【讨论】:

    【解决方案3】:

    Swift 3 版本:

    let done = UIBarButtonItem(barButtonSystemItem: .done, target: self, action: #selector(YourController.done))
    navigationItem.setLeftBarButtonItem(done, animated: false)
    

    【讨论】:

      【解决方案4】:

      适用于 Swift 4.x 及更高版本 (5.x)

      func addNavigationItemBtn(){
          let backBtn = UIBarButtonItem.init(title: "Menu", style: .plain, target: self, action: #selector(menuAction))
          self.navigationItem.leftBarButtonItem = backBtn
      }
      
      @objc func menuAction(){
          print("menu button pressed")  //Do your action here
      }
      

      【讨论】:

        【解决方案5】:

        斯威夫特 4

        let item = UIBarButtonItem(title: "Setting", style: .done, target: self, action: #selector(setting))
        
         navigationItem.rightBarButtonItem = item
        
        // then do your action in function setting 
        
        @objc
          final func setting() {
            print("Your work here.")
          }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2023-03-26
          • 1970-01-01
          • 1970-01-01
          • 2018-11-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多