在swift中以编程方式向工具栏添加按钮

时间:2016-01-30 19:21:58

标签: ios swift

我很难在swift中向工具栏添加按钮,下面你可以看到我之后的工具栏图片,不幸的是,即使我在Storyboard文件中设计了它,将工具栏设置为可见时,它不会显示。

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

enter image description here

以下是我用来尝试在代码中复制此代码的代码:

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添加到数组中。

然而,工具带仍然是空的,为什么会这样?

6 个答案:

答案 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)

使用

的当前选择器语法更新了答案

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”替换为您的视图控制器类名和您要编写的任何方法以管理工具栏按钮单击。