Короче говоря: я хочу иметь два полноэкранных представления, где я могу переключаться между представлением A и представлением B. Я знаю, что мог бы просто использовать контроллер панели вкладок, но я не хочу. Я хочу посмотреть, как это делается вручную, чтобы узнать, что происходит под капотом.
У меня есть UIViewController, который действует как корневой контроллер:
@interface MyRootController : UIViewController {
IBOutlet UIView *contentView;
}
@property(nonatomic, retain) UIView *contentView;
@end
ContentView подключен к UIView, который я добавил в качестве подпредставления к «представлению» Nib. Это имеет зеленый цвет, и я вижу его в полноэкранном режиме. Работает нормально.
Затем я создал два других View Controller примерно так же. ViewControllerA и ViewControllerB. ViewControllerA имеет синий фон, ViewControllerB имеет черный фон. Просто чтобы посмотреть, какой из них активен.
Итак, в реализации myRootController я делаю это:
// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad {
[super viewDidLoad];
ViewControllerA *vcA = [[ViewControllerA alloc] initWithNib];
[self.contentView addSubview:vcA.view];
[cvA release];
}
Кстати, метод -initWithNib выглядит так:
- (id)initWithNib { // Load the view nib
if (self = [super initWithNibName:@"ViewA" bundle:nil]) {
// do ivar initialization here, if needed
}
return self;
}
Это работает. Я вижу вид из ViewControllerA, когда я запускаю приложение. Но теперь главный вопрос: у View Controller обычно есть все эти методы, такие как:
- (аннулируются) viewWillAppear: (BOOL) анимированный;
- (пустоты) viewDidDisappear: (BOOL) анимированный; * * тысяча двадцать-одна
- (пустот) viewDidLoad; * * 1 023
... и так далее. Кто или что, или как будут вызываться эти методы, если я сделаю это «по-моему» без контроллера панели вкладок? Я имею в виду: если я выделю класс этого ViewController, а представление станет видимым, придется ли мне позаботиться о вызове этих методов? Откуда он знает, что viewWillAppear, viewDidDisappear или viewDidLoad? Я считаю, что у Tab Bar Controller есть вся эта «хитрость» под капотом. Или я не прав?
ОБНОВЛЕНИЕ: я проверял это. Если я освобожу контроллер представления (например: ViewControllerA), я не получу сообщение журнала на viewDidDisappear. Только при выделении и инициализации ViewControllerA я получаю viewDidLoad. Но это все. Так что теперь все признаки означают хитрость UITabBarController;) и я должен выяснить, как повторить это, верно?