Автоматическое добавление кнопок в панель инструментов

Мне сложно добавить кнопку на панель инструментов в 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:")
)

Как вы можете видеть, я настраиваю панель инструментов на видимость, инициализируя (и очищая) массив toolbarItems из UIBarButtonItem, а затем добавляя два массива UIBarButtonItem в правильный порядок.

Тем не менее, инструмент остается пустым, почему?

Ответ 1

Обычный способ сделать это - создать массив элементов панели инструментов, а затем назначить массив свойству 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(_:)))
)
toolbarItems = items

Ответ 2

Ни одно из вышеперечисленных не работало для меня, но:

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

Ответ 3

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)

Ответ 4

Вот пример с MKUserTrackingBarButtonItem:

navigationController?.toolbarHidden = false
let barButtonItem = MKUserTrackingBarButtonItem(mapView: self.mapView)
self.toolbarItems = [barButtonItem]

Ответ 5

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)

Ответ 6

Обновлен ответ с использованием синтаксиса текущего синтаксиса для

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" на имя класса контроллера вашего вида и любой метод, который вы хотите написать, чтобы управлять кнопкой на панели инструментов.