Я нашел достаточно хороших примеров того, как использовать пользовательское изображение в качестве фона для 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 не вызывается в этой ситуации.При этом внешняя переменная корректно обновляется.
Есть ли кто-нибудь, кто может сказать мне, что я могу здесь делать неправильно?
Спасибо