it-roy-ru.com

Элемент кнопки панели не отображается на панели навигации

Я работаю над приложением, в котором мой начальный контроллер представления встроен в контроллер навигации и панель вкладок. 

В моем приложении у меня есть 3 разные вкладки, одна вкладка - это представление настроек. Это таблица с 5 кнопками. каждая кнопка будет показывать один и тот же контроллер вида при касании. 

Когда я касаюсь одной из кнопок, у меня остается зеленая навигационная панель Nice, но мои кнопки не работают.

Я попытался перетащить элемент навигации в представление в раскадровке, а затем поместил в него элемент панели кнопок. Я вижу кнопку на своем раскадровке, но она не будет отображаться в моем приложении при запуске.

Я также добавил следующий код в мой viewDidLoad ():

let leftItem = UIBarButtonItem(title: "< Back", style: .Done, target: self, action: Selector("Save"))
let rightItem = UIBarButtonItem(title: "Save", style: .Plain, target: self, action: Selector("Save"))

//self.parentViewController?.navigationItem.leftBarButtonItem = leftItem // also doesn't work

navigationController?.navigationItem.leftBarButtonItem = leftItem
navigationController?.navigationItem.rightBarButtonItem = rightItem

Но это не будет иметь никакого эффекта.

Я проверил, назначен ли правильный вид UIViewController моему представлению в раскадровке, выполнил несколько чистых сборок (CMD + Shift + K) и перестроений (CMD + B).

Следующие изображения представляют собой скриншот части моей раскадровки и снимок экрана моего приложения в представлении, где кнопки не отображаются.

ПРАВКА

Добавлен новый скриншот об элементах управления в представлении. Они не работают с или без дополнительного кода в моем viewDidLoad.

 Screenshot of my Storyboard

 Screenshot of my app where the buttons should show up

 Screenshot of the the setup of the controls in my view

13
Jules

Удалите свой первый контроллер навигации, во-вторых, вам не нужно добавлять кнопку «назад», просто нажмите «Push segue», в-третьих, попытайтесь использовать self.navigationItem.leftBarButtonItem (попробуйте добавить self в начале.) * Оригинальный ответ был комментарием.

5
Ersin Sezgin

Вместо 

navigationController?.navigationItem.leftBarButtonItem = leftItem

делать 

navigationItem.leftBarButtonItem = leftItem

Обновление Я предлагаю вам добавить их прямо в раскадровку к вашему Viewcontroller

9
MarkHim

У меня было два segues: один через segue раскадровки, и один программный. Сюжет раскадровки показал кнопки, как и ожидалось. Прогамматическая передача, однако, показала вид без кнопок.

Для программного перехода я использовал:

present(theNewVC, animated: true)

Кнопки появились и работали правильно, когда я изменил это на:

show(theNewVC, sender: self)

Согласно документации, present(...) представляет контроллер представления модально. Видимо, контроллер модального представления не получает кнопки панели навигации. Далее я подтвердил это, изменив мою раскадровку на Present Modally - и кнопки там тоже исчезли.

(Используя Xcode 9, Swift 4)

2
leanne

Я также столкнулся с той же проблемой. 

В iOS 11 он работает нормально, но для iOS 10 или менее он не отображал UIBarButtonItems, которые добавлены программно.

Пожалуйста, назначьте кадр для UIBarButtonItem.

let button =  UIButton(type: .custom)
button.setImage(UIImage(named: "img_name"), for:.normal)
button.addTarget(self, action: #selector(btnAction), for: .touchUpInside)
button.frame = CGRect(x:0, y:0, width:32, height:32)
let barButton = UIBarButtonItem(customView: button)
self.navigationItem.rightBarButtonItem = barButton

1
iDev

Это случилось со мной недавно. Я делал то, что упоминал Эрсин, но безрезультатно. Откатился еще немного и узнал, что это был виновник:

nav.pushViewController(notifications, animated: false) nav.pushViewController(interactionCreateOrEdit, animated: false)  

Я изменил это на

nav.setViewControllers([notifications, interactionCreateOrEdit], animated: false)

и UIBarButtonItems начали появляться снова.

0
Michael McKenna