以编程方式在swift中将button添加到工具栏

我很难在swift中添加一个button到工具栏,下面你可以看到我以后的工具栏的图像,不幸的是,即使我已经在我的Storyboard文件中devise了它,它不显示时设置工具栏是可见的。

我devise的这个方法是两个项目,第一个是一个可flexable space元素,第二个是一个add元素。 它看起来像这样:

在这里输入图像说明

这里是我用来试图在代码中复制这个代码:

 self.navigationController?.toolbarHidden = false self.navigationController?.toolbarItems = [UIBarButtonItem]() self.navigationController?.toolbarItems?.append( UIBarButtonItem(barButtonSystemItem: .FlexibleSpace, target: self, action: nil) ) self.navigationController?.toolbarItems?.append( UIBarButtonItem(barButtonSystemItem: .Add, target: self, action: "onClickedToolbeltButton:") ) 

正如你所看到的,我将工具栏设置为可见,初始化(和清除)UIBarButtonItem的toolbarItems数组,然后按照正确的顺序向数组中添加两个UIBarButtonItem。

但是,工具带仍然是空的,为什么呢?

通常的方法是创build工具栏项目的数组,然后将数组分配给工具栏的items属性。

 self.navigationController?.isToolbarHidden = false var items = [UIBarButtonItem]() items.append( UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil) ) items.append( UIBarButtonItem(barButtonSystemItem: .add, target: self, action: #selector(onClickedToolbeltButton(_:))) ) self.navigationController?.toolbar.items = items 

以上都没有为我工作,但:

Swift 3 / Swift 4

 self.navigationController?.isToolbarHidden = false var items = [UIBarButtonItem]() items.append( UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: self, action: nil) ) items.append( UIBarButtonItem(barButtonSystemItem: .add, target: self, action: #selector(add)) ) // replace add with your function self.toolbarItems = items // this made the difference. setting the items to the controller, not the navigationcontroller 
 self.navigationController?.toolbarItems = items self.navigationController?.setToolbarItems(items, animated: false) self.navigationController?.toolbar.setItems(items, animated: false) 

尝试一下。

  self.navigationController?.toolbarHidden = false var items = [UIBarButtonItem]() items.append( UIBarButtonItem(barButtonSystemItem: .FlexibleSpace, target: self, action: nil) ) items.append( UIBarButtonItem(barButtonSystemItem: .Add, target: self, action: "onClickedToolbeltButton:") ) self.navigationController?.toolbar.setItems(items, animated: false) 

这里是一个MKUserTrackingBarButtonItem的例子:

 navigationController?.toolbarHidden = false let barButtonItem = MKUserTrackingBarButtonItem(mapView: self.mapView) self.toolbarItems = [barButtonItem] 
 let addButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.Add, target: self, action: "addSomething:") toolbarItems = [UIBarButtonItem(barButtonSystemItem: .FlexibleSpace, target: self, action: nil),addButton] self.navigationController!.setToolbarHidden(false, animated: false) 

使用当前select器语法更新答案

Swift 3

 var barButtons = [UIBarButtonItem]() barButtons.append( UIBarButtonItem(barButtonSystemItem: .done, target: self, action: #selector(ThisViewController.onDoneBarButtonClick)) ) self.navigationItem.setRightBarButtonItems(barButtons, animated: false) 

您可以将此代码放置在任何加载事件中。 它在viewDidLoad()中对我无缝工作。

将“ThisViewController.onDoneBarButtonClick”replace为您的视图控制器类名称以及要编写的任何方法来pipe理工具栏button单击。