Swift 3.0 Добавление правой кнопки в панель навигации
Я добавил навигационную панель в верхнюю часть контроллера вида. Я пытаюсь контролировать, является ли кнопка видимой на основе условия, но у меня возникли проблемы с добавлением кнопки. До сих пор я,
var addButton: UIBarButtonItem = UIBarButtonItem(title: "test", style: .done, target: self, action: #selector(addTapped))
override func viewDidLoad() {
super.viewDidLoad()
let boool = true
if boool {
self.navigationItem.rightBarButtonItem = self.addButton
}
else {
self.navigationItem.rightBarButtonItem = nil
}
}
func addTapped(sender: AnyObject) {
print("hjxdbsdhjbv")
}
Я считаю, что он работает неправильно, потому что я добавил навигационную панель в VC, вместо того, чтобы использовать навигационный контроллер и работать с ним. Мне было интересно, есть ли способ работать с этой панелью навигации.
Ответы
Ответ 1
Вы говорите, что добавили UINavigationBar
в свой контроллер просмотра через раскадровку, но, глядя на код, который вы указали, нет выходного соединения с вашей навигационной панелью в IB.
Чтобы получить доступ к self.navigationItem
, ваш контроллер представления должен быть встроен в UINavigationController
или быть частью иерархии. Если у вас нет необходимости в настраиваемой навигационной панели на отдельном контроллере представления, я предлагаю удалить это из интерфейса Builder, а затем убедиться, что любой контроллер вида, о котором идет речь, встроен в UINavigationController
или он помещается в стек навигации из другой контроллер, встроенный в контроллер навигации, и затем вы должны увидеть свой UIBarButtonItem
.
Ответ 2
Это просто. Поместите эту строку кода в viewDidLoad
:
self.navigationItem.rightBarButtonItem = UIBarButtonItem(title: "test", style: .done, target: self, action: #selector(addTapped))
Обновлено для Swift 4 или более поздней версии:
Пользовательская функция:
@objc func action(sender: UIBarButtonItem) {
// Function body goes here
}
(Пользовательский) Правый элемент панели кнопок:
self.navigationItem.rightBarButtonItem = UIBarButtonItem.init(title: "some_text", style: .done, target: self, action: #selector(self.action(sender:)))
(Пользовательский) Левый элемент панели кнопок:
self.navigationItem.leftBarButtonItem = UIBarButtonItem.init(title: "some_text", style: .done, target: self, action: #selector(self.action(sender:)))
Также вы можете добавить элементы кнопок системной панели примерно так: UIBarButtonItem.SystemItem
Определяет системные изображения для элементов кнопок панели: .add,.done,.cancel,.edit,.save,.compose,.reply,.organize и Больше.
(Система) Правая панель кнопок:
self.navigationItem.rightBarButtonItem = UIBarButtonItem.init(barButtonSystemItem: UIBarButtonItem.SystemItem.add, target: self, action: #selector(self.action(sender:)))
(Система) Элемент левой панели кнопок:
self.navigationItem.leftBarButtonItem = UIBarButtonItem.init(barButtonSystemItem: UIBarButtonItem.SystemItem.add, target: self, action: #selector(self.action(sender:)))
Ответ 3
let rightBarButtonItem = UIBarButtonItem.init(image: UIImage(named: "EditImage"), style: .done, target: self, action: #selector(ViewController.call_Method))
self.navigationItem.rightBarButtonItem = rightBarButtonItem
Ответ 4
Во-первых, вам нужно подключить навигационную панель к IBOutlet, чтобы вы могли ссылаться на нее в своем коде. После этого этот код должен работать:
let navigationItem = UINavigationItem(title: "Title")
navigationItem.rightBarButtonItem = self.addButton
navigationItem.hidesBackButton = true
self.navigationBar.pushItem(navigationItem, animated: false)
Ответ 5
Swift 4.2;
Добавить viewController
override func viewDidLoad() {
super.viewDidLoad()
self.addNavigationBarButton(imageName: "ic_back", direction:.left)
}
Добавьте Class
вашего API или класс утилит
public func addNavigationBarButton(imageName:String,direction:direction){
var image = UIImage(named: imageName)
image = image?.withRenderingMode(.alwaysOriginal)
switch direction {
case .left:
self.navigationItem.leftBarButtonItem = UIBarButtonItem(image: image, style:.plain, target: nil, action: #selector(goBack))
case .right:
self.navigationItem.rightBarButtonItem = UIBarButtonItem(image: image, style:.plain, target: nil, action: #selector(goBack))
}
}
@objc public func goBack() {
self.navigationController?.popViewController(animated: true)
}
public enum direction {
case right
case left
}
Ответ 6
протестировано в Xcode 10.2, swift 5.0; Во-первых, я встроил свой ViewController в UINavigationController в IB. Затем во ViewDidLoad включите эти строки
self.title = "orange"
self.navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .add, target: self, action: #selector(changeLayout)).
Примечание. Не удалось получить доступ к заголовку или кнопке добавления через контроллер навигации. Например: настройка заголовка - Self.navigationcontroller.navigationItem.title не работает,