Добавление обновленного UIBarButtonItem в UINavigationController, загруженный из NIB - PullRequest
9 голосов
/ 19 октября 2010

У меня UINavigationController загрузка в первой вкладке UITabBarController. Я хотел бы добавить кнопку обновления на правой стороне UINavigationItem. Мое смутное понимание состоит в том, что нужно установить свойства, такие как заголовки и кнопки на контроллере навигации до того, как будет добавлено в иерархию элементов управления. У меня нет проблем с добавлением кнопок в дочерний контроллер навигации, но я озадачен тем, как изменить корень, поскольку он загружается из пера.

Итак, в приведенном ниже снимке экрана IB (ой, недостаточно очков репутации, позвольте мне попытаться представить это ....), я пытаюсь добавить кнопку обновления к выбранному элементу.

  • Владелец файла
  • Первый респондент
  • Делегат приложения
  • Окно
  • Контроллер панели вкладок
    • Панель вкладок
    • Контроллер представления списка наблюдений
      • Панель навигации
      • Просмотр контроллера
        • Вид таблицы
        • Элемент навигации
      • Элемент Tab Tab
    • Другой контроллер представления списка
    • и т.д.
    • и т.д.

Я пытался добавить кнопку в navigationController's viewDidLoad, без посторонней помощи:

- (void)viewDidLoad {
[super viewDidLoad]; 

self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc]
         initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh
         target:self
             action:@selector(refresh:)];
}

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

Есть идеи, как добавить кнопку в процесс загрузки навигационного контроллера из пера?

Спасибо!

Ответы [ 2 ]

21 голосов
/ 19 октября 2010

Похоже, что ваш метод viewDidLoad выделяет, но не освобождает элемент панели кнопок. Вы должны сделать это:

UIBarButtonItem *button = [[UIBarButtonItem alloc]
     initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh
     target:self
         action:@selector(refresh:)];
self.navigationItem.rightBarButtonItem = button;
[button release];

Это необходимо сделать не в контроллере навигации, а в корневом контроллере представления, который содержится в контроллере навигации. Другими словами, поместите его в «View Controller», а не в «View Viewler Controller»

Каждый контроллер, который вы нажимаете на контроллер nav, может иметь собственный self.navigationItem.wh независимо, и это будет отображаться контроллером nav, когда новый контроллер помещается в его стек.

1 голос
/ 14 декабря 2018

Работал на SWIFT 4.1

navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: 
UIBarButtonSystemItem.refresh, target: self, action: 
#selector(RootViewController.refresh))
...