Установка пользовательского изображения для UINavigationBar или заголовка: путаница во время навигации - PullRequest
1 голос
/ 28 марта 2011

Я нашел достаточно хороших примеров того, как использовать пользовательское изображение в качестве фона для UINavigationBar, не скрывая никаких кнопок после или во время навигации между различными представлениями.Однако у меня есть следующая проблема, на которую, похоже, нет ответа.

У меня есть объект UITabBarViewController в качестве корневого контроллера, к которому я добавил несколько различных объектов UINavigationControllers в качестве подпредставлений (по одному на вкладкукаждый из них инициализируется объектом UITableViewController в качестве корневого контроллера.Из каждого табличного представления можно перейти к дочернему контроллеру, который отображает более подробную информацию о выбранной ячейке.Теперь у меня проблема в следующем:

В контроллере навигации каждого табличного представления я установил пользовательское фоновое изображение.Это делается путем перезаписи метода drawRect в UINavigationBar.Когда пользователь перемещается вниз к подробному виду каждого табличного представления, изображение должно быть заменено заголовком подробного представления.Я выполняю это, используя глобальную переменную, и обновляю ее в каждом методе viewWillAppear каждого представления и используя условие if внутри перезаписанного метода drawRect.Поэтому, чтобы проиллюстрировать это с помощью некоторого кода:

В делегате приложения .h.file я объявляю внешнюю переменную как:

extern BOOL displayImage;

В файле .m делегата приложения я инициализирую внешнюю переменнуюas:

BOOL displayImage = TRUE;

Для всех контроллеров представления метод viewWillAppear реализован следующим образом:

// View where I want to show the image in the navigation bar
- (void)viewWillAppear:(BOOL)animated {
   ...

   self.navigationItem.title = nil;      // No title
   displayImage = TRUE;
   [self.navigationController.navigationBar setNeedsDisplay];

   ...
} 

// View where I do NOT want to show the image in the navigation bar
- (void)viewWillAppear:(BOOL)animated {
   ...

   self.title = @"Info";
   displayImage = FALSE;
   [self.navigationController.navigationBar setNeedsDisplay];

   ...
}

// Overwritten drawRect method of UINavigationBar
- (void)drawRect:(CGRect)rect {
   if (displayImage) {
      // Code that draws the image by calling drawInRect
   } else {
      // Code that just sets a black background
   }
}

Это прекрасно работает при переходе от табличного представления к подробному представлению (дочерний контроллертабличное представление) и обратно в родительское представление.Однако при переходе от подробного вида к другой вкладке панели вкладок заголовок подробного представления исчезает, и изображение снова появляется (пока все хорошо), но когда я затем возвращаюсь к вкладке, содержащей подробный видпоявляется заголовок подробного вида, но изображение не исчезает (т. е. ОБА заголовок и изображение отображаются на панели навигации).Похоже, что метод setNeedsDisplay не вызывается в этой ситуации.При этом внешняя переменная корректно обновляется.

Есть ли кто-нибудь, кто может сказать мне, что я могу здесь делать неправильно?

Спасибо

1 Ответ

0 голосов
/ 22 сентября 2011

Я тоже был в такой же ситуации.Если я получаю вашу проблему, ваше изображение с панели навигации не исчезает при переключении между различными вкладками.Поэтому вам нужно создать два изображения: одно обычное изображение, другое - черное.

Используйте черное изображение вместо установки черного цвета в другой части метода drawrect в категории.А также сбросьте переменную в viewWillDisappear при переключении со страницы вместо установки переменной на следующей странице.Может быть, ваша проблема будет решена.

...