Как добавить кнопку на 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 = ...

Другие вопросы по тегам