Как добавить кнопку на NavigationBar динамически (во время выполнения)? - Swift 2.0
Я пытаюсь добавить панель навигации динамически, но происходит что-то немного странное.
Мой экран - это просто UINavigation и View с красным фоном:
И это мой код Swift:
import UIKit
class ViewController: UIViewController {
@IBOutlet var navBar: UINavigationBar!
@IBOutlet var viewLongPress: UIView!
var viewLongPressInitialPosition: CGPoint!
var frameSize: CGSize {
get {
return self.view.frame.size
}
}
override func viewDidLoad() {
super.viewDidLoad()
navBar.frame.size.height = 64.0
viewLongPress.addGestureRecognizer(UILongPressGestureRecognizer(target: self, action: "viewLongPressAction:"))
viewLongPressInitialPosition = viewLongPress.frame.origin
}
func viewLongPressAction(sender: UILongPressGestureRecognizer) {
let locationInView = sender.locationInView(self.view)
if sender.state == .Began {
} else if sender.state == .Changed {
viewLongPress.frame.origin = CGPoint(x: locationInView.x - (viewLongPress.frame.width / 2), y: locationInView.y - (viewLongPress.frame.height / 2))
} else if sender.state == .Ended {
if locationInView.y <= navBar.frame.height {
let item = UINavigationItem()
item.rightBarButtonItems = [UIBarButtonItem(title: "Test", style: .Plain, target: nil, action: "noAction:")]
navBar.items?.append(item)
}
viewLongPress.frame.origin = viewLongPressInitialPosition
}
}
func noAction(sender: AnyObject) {
}
}
Я пытаюсь добавить UINavigationItem, чтобы закончить перетаскивание вида в верхней части панели навигации.
Но когда я добавляю кнопку, панель навигации выглядит так:
Кнопка должна быть добавлена и выглядит следующим образом:
Я думаю, что я что-то упустил, но я не могу решить.
Я попытался добавить вторую кнопку (leftBar), но название исчезло.
И если у вас уже есть кнопка, как мне добавить еще одну кнопку?
Кто-нибудь может мне помочь?
Спасибо за ответ.
1 ответ
Вы заменяете всю свою UINavigationItem
что, вероятно, не то, что вы хотите. Пытаться self.navigationItem.rightBarButtonItem = ...
вместо. Вам даже не нужно взаимодействовать с фактической панелью навигации, только с элементом навигации текущего контроллера представления (который также содержит его заголовок).
Редактировать: похоже, ваш navBar уже имеет элемент навигации. Что произойдет, если вы выполните это задание вместо: self.navBar.items.first?.rightBarButtonItem = ...