导航栏中的按钮

时间:2017-09-14 07:16:07

标签: ios swift uinavigationcontroller uinavigationbar

如何向仅出现在特定视图控制器中的导航栏添加按钮?以及如何将不同的按钮添加到嵌入在导航控制器中的不同视图控制器。

4 个答案:

答案 0 :(得分:0)

试试这个: -

 extension UIViewController {
func addButton(img:String){
    let imgIcon = UIImage(named: img)

 let btn = UIBarButtonItem(image: imgIcon, style: .plain, target: 
  self, action: #selector(self.btnAction))
   // if you want  to set right button then add right bar button item
    self.navigationItem.leftBarButtonItem = btn
  }

   func btnAction(){
   }

func removeButton() {
    self.navigationItem.leftBarButtonItem = nil

}

      }

当你想添加按钮
时   在viewDidLoad中: -

  self.addButton(img:"imageName")

如果您想在所有视图控制器上执行单独的操作   在控制器上调用它

     override func btnAction() {
      }

删除: -

   self.removeButton()

如果您想在不同的控制器上添加不同的按钮,请在 viewDidLoad 中添加按钮,然后在 viewWillDisappear 中删除

答案 1 :(得分:0)

在导航栏中拖动故事板中特定视图控制器的栏按钮项

Storyboard

答案 2 :(得分:0)

最佳解决方案是

创建Viewcontroller继承自UIViewController或UITableViewController,并为setupNavigationButton或buttonText或

编写方法

(最好在超级控制器上添加动作方法)

例如:

-(void) setupNavigationButton {
    self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc]initWithTitle:@"button1" style:UIBarButtonItemStylePlain target:self action:@selector(buttonActin:)];
}

并在创建的控制器上的viewDidLoad上调用此方法

接下来,当您创建自己的控制器时,将此viewcontroler添加为父视图控制器。所以它会自动添加该视图。

(你想在你的控制器上写一个动作)

使用上述方法,它只保存一行。但是你可以节省更多的线路。假设您只想更改该按钮上的文本和操作。

如果只需要更改文本,请编写一个返回按钮文本的方法

(你的baseviewcontroller的以下行)

-(NSString *) rightButtonText {
  return @"";
}

并为baseviewcontroller添加以下代码

-(void)setNavigationControler {
    self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc]initWithTitle:[self rightButtonText] style:UIBarButtonItemStylePlain target:self action:@selector(buttonActin:)];
}

并在baseviewcontroller上调用它

现在您的每个视图控制器,您需要覆盖rightButtonText并创建选择器方法并执行该操作。

假设您不需要为某个viewcontroler添加该按钮。那你有几个选择

1)从viewcontroller中删除baseviewcotroler继承 2)调用supper viewDidload后添加以下代码

 self.navigationItem.rightBarButtonItem = 

3)使用空白方法体覆盖控制器上的setNavigationControler方法。

-(void)setNavigationControler {}

答案 3 :(得分:0)

您不必向导航栏添加按钮,而是可以添加栏按钮项。如果您需要,您可以自定义条形按钮项目,以满足您的要求,如@Pushpendra建议的设置自定义图像。

编程方式: 您的View Controller负责为其导航栏提供条形按钮项目。如果已覆盖它,则在每个视图控制器的viewDidLoad()或init()中创建条形按钮项。

故事板: 从故事板编辑器中拖动n个下拉栏按钮项并设置插座以便以后更改行为非常方便。

如果您正准备控制行为,则可以根据条件要求在需要时添加或删除条形按钮。

class FooViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()

        /// Assuming this view controller presented/pushed with navigation controller
        let buttonItem = UIBarButtonItem(barButtonSystemItem: .save, target: self, action: #selector(FooViewController.buttonItemAction(sender:)))
        self.navigationItem.leftBarButtonItem = buttonItem
    }

    @IBAction func buttonItemAction(sender: UIBarButtonItem)    {
        /// some action
    }
}


class BarViewController: UIViewController {
    var buttonItem: UIBarButtonItem?
    var showButtonItem = false

    override func viewDidLoad() {
        super.viewDidLoad()

        /// Assuming this view controller presented/pushed with navigation controller
        buttonItem = UIBarButtonItem(barButtonSystemItem: .bookmarks, target: self, action: #selector(BarViewController.buttonItemAction(sender:)))
        self.navigationItem.leftBarButtonItem = buttonItem
    }

    @IBAction func buttonItemAction(sender: UIBarButtonItem)    {
        /// some action
    }

    @IBAction func toggleButtonItem(sender: UIButton)   {
        self.navigationItem.rightBarButtonItem = (self.showButtonItem == true) ? self.buttonItem : nil
    }
}

如果这是您不想要的,那么请将您的问题与您尝试过的代码一起更新。