Лучшее место для добавления кнопки панели навигации?

#iphone #objective-c #ios #uikit

#iPhone #objective-c #iOS #uikit

Вопрос:

Где я должен разместить свой код, который создает UIBarButtonItem и присваивает его self.navigationItem.rightBarButtonItem ? В initWithNibName или viewDidLoad ?

РЕДАКТИРОВАТЬ: я должен уточнить, что я загружаю перо из Interface Builder.

Ответ №1:

viewDidLoad это правильное место для создания кнопки программно, независимо от того, загружаете ли вы перо из Interface Builder или нет.

Из документации по UIViewController классу, viewDidLoad методу

Этот метод вызывается после того, как контроллер представления загрузил связанные с ним представления в память. Этот метод вызывается независимо от того, были ли просмотры сохранены в файле nib или созданы программно в методе loadView. Этот метод чаще всего используется для выполнения дополнительных шагов инициализации представлений, загружаемых из файлов nib.

Комментарии:

1. Можете ли вы указать мне, почему не следует загружать кнопку в loadView?

2. вы можете, просто OP ссылается на initWithNibName:bundle метод, поэтому они должны использовать Interface Builder для загрузки своего основного представления. ‘loadView’ используется только при программном создании всей структуры представления.

Ответ №2:

- (void) loadView Если вы делаете это прагматично. В противном случае поступайте так, как предлагает Rog.

Комментарии:

1. Сейчас она находится в viewDidLoad, но я не вижу никакой анимации. Может быть, это слишком быстро, чтобы видеть?

2. если вы хотите увидеть анимацию, загрузите ее viewDidAppear вместо этого, но убедитесь, что вы выгрузили ее viewWillDisappear или viewDidDisappear хотите, чтобы она анимировалась при каждом отображении представления.

3. @Wolfert loadView вызывается только в том случае, если вся структура представления создается программно (т. Е. Не Используется конструктор интерфейса).

4. Извините, я перепутал его с UINavigationItem, который можно добавить анимированным :.

5. @Wolfert: В документации говорится, что я не должен переопределять loadView «если вы используете Interface Builder для создания своих представлений и инициализации контроллера представления».