Очистить изображение панели навигации iPhone

В настоящее время я использую этот код в своем делегате приложения, чтобы установить пользовательское фоновое изображение для панели навигации:

@implementation UINavigationBar (CustomImage)
   - (void)drawRect:(CGRect)rect {
      UIImage *image = [UIImage imageNamed: @"MyNavigationBar.png"];
      [image drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
   }
@end   

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

Одно из представлений представляет собой модальный контроллер представления (точнее, EKEventEditViewController), а заголовок на панели навигации говорит «Добавить событие», который отображается поверх моего настраиваемого изображения.

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

Кто-нибудь знает, как это сделать, все еще используя заявленный метод для установки фонового изображения панели навигации?


person Patrick Holloway    schedule 22.03.2011    source источник


Ответы (1)


пожалуйста, никогда не делай этого ...

Вы заменяете метод drawRect: в UINavigationBar, он очень хрупкий и может вызвать у вас (и ваших пользователей) головную боль.

Ваш фон всегда будет отображаться во всех экземплярах UINavigationBar, потому что вы заменили реализацию drawRect:

Невозможно заменить заголовок EKEventEditViewController. Конечно, выход есть всегда, но это даже хуже, чем замена реализации drawRect:

Вместо этого создайте подкласс UINavigationBar и используйте его в тех местах, где вам требуется настраиваемая панель навигации.

person Bill Dudney    schedule 22.03.2011