titleView работает только в одном контроллере представления (self.navigationController равен nil) - PullRequest
0 голосов
/ 01 ноября 2011

У меня есть несколько навигационных контроллеров, которые настроены в NIB под контроллером вкладок.Я пытаюсь установить один и тот же логотип в контроллере вида сверху каждого навигационного контроллера.

В первом появившемся контроллере вида у меня есть этот код в viewDidLoad:

self.navigationItem.titleView = [[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"green-noback-logo-only.png"]] autorelease];

Это работает (ну, почти, мне придется изменить размер изображения) и заменяеттекст, настроенный в NIB с моим изображением логотипа.

Однако этот точно такой же код не работает ни в одном из двух других контроллеров представления.Вместо этого отображается любой текст, который я настроил для заголовка в NIB.Я попытался поместить этот код в initWithCoder, viewDidLoad, viewDidAppear и viewWillAppear, и он ничего не делает.Я явно устанавливаю leftBarButtonItem на ноль, хотя я предполагаю, что это был ноль для начала.Я также уже проверил, что self.navigationItem не равен nil ни в одном из мест, где я пытаюсь установить titleView.

Любая идея, которая была бы особенной в двух других контроллерах, что помешало бы им иметьtitleView установлен?Иначе, у кого-нибудь есть более надежный способ установить titleView?

Ответы [ 2 ]

1 голос
/ 02 ноября 2011

tl; др: я облажался initWithCoder:.

Хороший гангстер для начинающих Следуя ответу Пола Н., я обнаружил, что self.navigationController == nil в двух сломанных контроллерах вида. Мне потребовалось еще несколько часов на то, чтобы разобраться с остальными.

Все три контроллера верхнего уровня были подклассами UITableViewController. Однако только двое из них использовали сгруппированный стиль. Я переопределил initWithCoder:, чтобы использовать initWithStyle: внутри двух нерабочих контроллеров табличного представления. Это отбросило соединение с навигационным контроллером, хранящимся в NIB. Первоначально я делал это, потому что не мог понять, как установить сгруппированный стиль для тех, кто находится внутри NIB (предложил другой ответ здесь ).

Мне кажется, это подло мне на подклассы такого гнилого стиля.

В любом случае, решение состояло в том, чтобы исправить реализацию initWithCoder: для вызова [super initWithCoder:coder] как обычно и настроить стиль табличного представления в NIB. Я сделал это, перетащив табличное представление под этот контроллер представления, установив источник данных, установив делегат и установив его в сгруппированный стиль. (Вот как контроллеры табличного представления устанавливаются в NIB по умолчанию.)

1 голос
/ 01 ноября 2011

попробуйте установить представление изображения на self.navigationController.navigationItem вместо self.navigationItem.

...