以编程方式在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单击。