Это может быть глупый вопрос, но возможно ли сохранить право UIBarButtonItem
на несколько видов, управляемых UINavigationController
? У меня есть прогрессирование взглядов, которые часто имеют одно и то же право UIBarButtonItem
, но когда я нажимаю новый вид на мой UINavigationController
, я должен каждый раз переопределять кнопку, даже если она не изменилась. В основном, заметная переходная анимация от одного вида к другому - это то, что меня беспокоит, потому что точно такая же кнопка кратковременно исчезает, а затем обратно, что не нужно, поскольку нет визуального изменения. Должен ли я просто добавить UIButton
в качестве подзаголовка моего UINavigationBar
и выполнить эффект «правой панели» таким образом?Стойкий rightBarButtonItem Свойство UINavigationItem
ответ
Мы сделали это в нашем приложении. Мы создали единый UIBarButtonItem, который мы поменяем с одного UIViewController на другой, когда пользователь переходит. Хитрость заключалась в использовании UINavigationControllerDelegate, метода navigationController: willShowViewController: анимированный:. Мы устанавливаем для rightBarButtonItem исходящего UIViewController значение nil и rightBarButtonItem входящего контроллера на вашу кнопку. Это боль, чтобы справиться, но она работает.
UIBarButtonItems могут быть созданы как автономные экземпляры в файле nib/xib. Если ничего особенного не происходит, это не позволяет вам создать кнопку в построителе интерфейса, вы должны подключить ее к свойству rightBarButtonItem UINavigationItem для каждого контроллера представления, который должен повторно использовать кнопку. Никакой цели не требуется.
Привет, Мэтт. Можете ли вы быть более конкретным с примером - я считаю, что это реализация в образце кода NavBar.xcode, но у меня возникают некоторые проблемы после всего этого. (BTW - я проголосовал за ваш ответ, поскольку я думаю, что это и правильное, и более элегантное решение.) – mobibob
Удивительный! Спасибо. Я забыл исследовать UINavigationControllerDelegate. – LucasTizma
Спасибо! Работал для меня! :) –
Эй, как я могу получить исходящий контроллер UIView? кажется, я могу получить только тот, который будет представлен, но не текущий? cheers – zanona