2009-04-29 15 views
8

Это может быть глупый вопрос, но возможно ли сохранить право UIBarButtonItem на несколько видов, управляемых UINavigationController? У меня есть прогрессирование взглядов, которые часто имеют одно и то же право UIBarButtonItem, но когда я нажимаю новый вид на мой UINavigationController, я должен каждый раз переопределять кнопку, даже если она не изменилась. В основном, заметная переходная анимация от одного вида к другому - это то, что меня беспокоит, потому что точно такая же кнопка кратковременно исчезает, а затем обратно, что не нужно, поскольку нет визуального изменения. Должен ли я просто добавить UIButton в качестве подзаголовка моего UINavigationBar и выполнить эффект «правой панели» таким образом?Стойкий rightBarButtonItem Свойство UINavigationItem

ответ

14

Мы сделали это в нашем приложении. Мы создали единый UIBarButtonItem, который мы поменяем с одного UIViewController на другой, когда пользователь переходит. Хитрость заключалась в использовании UINavigationControllerDelegate, метода navigationController: willShowViewController: анимированный:. Мы устанавливаем для rightBarButtonItem исходящего UIViewController значение nil и rightBarButtonItem входящего контроллера на вашу кнопку. Это боль, чтобы справиться, но она работает.

+0

Удивительный! Спасибо. Я забыл исследовать UINavigationControllerDelegate. – LucasTizma

+0

Спасибо! Работал для меня! :) –

+0

Эй, как я могу получить исходящий контроллер UIView? кажется, я могу получить только тот, который будет представлен, но не текущий? cheers – zanona

1

UIBarButtonItems могут быть созданы как автономные экземпляры в файле nib/xib. Если ничего особенного не происходит, это не позволяет вам создать кнопку в построителе интерфейса, вы должны подключить ее к свойству rightBarButtonItem UINavigationItem для каждого контроллера представления, который должен повторно использовать кнопку. Никакой цели не требуется.

+0

Привет, Мэтт. Можете ли вы быть более конкретным с примером - я считаю, что это реализация в образце кода NavBar.xcode, но у меня возникают некоторые проблемы после всего этого. (BTW - я проголосовал за ваш ответ, поскольку я думаю, что это и правильное, и более элегантное решение.) – mobibob