"Это с тобой когда-нибудь случалось?"
(Примечание: ниже приведен код, дружественный к ARC, следовательно, нет вызова autorelease
или пар retain
/ release
.)
#pragma mark - UIViewController
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
// "We interrupt this designated initializer to go do our own thing ..."
return [self init];
}
#pragma mark - NSObject
- (id)init {
// Why hello there, superclass designated initializer.
if ((self = [super initWithNibName:@"YourNibHere" bundle:nil])) {
// We're in a nav controller, so set the title.
self.navigationItem.title = @"Item Title";
// "Someone set up us the tab bar!"
[self setTabBarItem:[[UITabBarItem alloc] initWithTitle:@"Item Title" image:[UIImage imageNamed:@"itemIcon.png"] tag:itemTag]];
}
return self;
}
Итак ... это верхний UIViewController в UINavigationController , который, в свою очередь, находится в UITabBarController по некоторому индексу. Классические turducken контроллеров представления Какао, если хотите.
Вы касаетесь элемента панели вкладок, контекст меняется на верхнюю часть UIViewController , и жизнь прекрасна.
А, а что если вы хотите программно переключиться на это с контроллера представления с другим индексом (панель вкладок)?
Кажется, достаточно просто. Просто используйте -selectedViewController:
и передайте UINavigationController ( not UIViewController ), на который вы хотите переключиться. «В основном безвредный».
Это работает каждый раз ... за исключением того, что я сталкиваюсь с действительно раздражающей причудой всякий раз, когда UINavigationController спрятан под печально известным Больше контроллером навигации (используется iOS, когда есть больше пять элементов панели вкладок в игре).
Причудка? Когда я нажимаю кнопку «Назад» («Дополнительно»), чтобы выскочить UIViewController (он больше не является верхним из-за опции sitch, y'see), imageView
и textLabel
в ячейке табличного представления идентифицирующее этот элемент панели вкладок отсутствует ! Как в не там. Просто пустая клетка.
Если я прокручиваю ячейку табличного представления за пределами экрана и снова включаю ее, или иным образом перемещаюсь от и к дополнительному навигационному контроллеру, затем появляется. : (
Что случилось? Пытливые умы хотят знать ...