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