我很难在swift中向工具栏添加按钮,下面你可以看到我之后的工具栏图片,不幸的是,即使我在Storyboard文件中设计了它,将工具栏设置为可见时,它不会显示。
我设计的方式是两个项目,第一个是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添加到数组中。
然而,工具带仍然是空的,为什么会这样?
答案 0 :(得分:25)
以上都不适合我,但是:
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
答案 1 :(得分:17)
通常的方法是创建工具栏项数组,然后将数组分配给工具栏的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
答案 2 :(得分:6)
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)
答案 3 :(得分:2)
以下是MKUserTrackingBarButtonItem
的示例:
navigationController?.toolbarHidden = false
let barButtonItem = MKUserTrackingBarButtonItem(mapView: self.mapView)
self.toolbarItems = [barButtonItem]
答案 4 :(得分:-1)
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)
答案 5 :(得分:-1)
使用
的当前选择器语法更新了答案var barButtons = [UIBarButtonItem]()
barButtons.append(
UIBarButtonItem(barButtonSystemItem: .done, target: self, action: #selector(ThisViewController.onDoneBarButtonClick))
)
self.navigationItem.setRightBarButtonItems(barButtons, animated: false)
您可以将此代码放在任何加载事件中。它在viewDidLoad()中无缝地工作。
将“ThisViewController.onDoneBarButtonClick”替换为您的视图控制器类名和您要编写的任何方法以管理工具栏按钮单击。