Вкратце: я хочу иметь два полноэкранных представления, где я могу переключаться между представлением A и представлением B. Я знаю, что могу просто использовать контроллер панели вкладок, но я этого не хочу. Я хочу посмотреть, как это делается вручную, чтобы узнать, что происходит под капотом.
У меня есть UIViewController, который действует как корневой контроллер:
@interface MyRootController : UIViewController {
IBOutlet UIView *contentView;
}
@property(nonatomic, retain) UIView *contentView;
@end
ContentView подключается к UIView, который я добавил в качестве представления в "представление" Nib. Это зеленый цвет, и я вижу его в полноэкранном режиме. Прекрасно работает.
Тогда я создал два других View Controllers почти так же. 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 при запуске приложения. Но теперь большой вопрос: A View Controller обычно имеет все такие методы, как:
- (пустоты) viewWillAppear: (BOOL) анимационный;
- (пустоты) viewDidDisappear: (BOOL) анимационный;
- (пустоты) viewDidLoad;
... и так далее. Кто или что, или как будут вызваны эти методы, если я сделаю это "мой" путь без контроллера панели вкладок? Я имею в виду: если я выделил этот класс ViewController и вид стал видимым, мне нужно будет позаботиться о вызове этих методов? Как он знает, что viewWillAppear, viewDidDisappear или viewDidLoad? Я считаю, что у Tab Bar Controller есть все это "умение" под капотом. Или я не прав?
ОБНОВЛЕНИЕ: Я его протестировал. Если я отпущу контроллер вида (например: ViewControllerA), я не получу сообщения журнала в viewDidDisappear. Только при распределении и инициализации ViewControllerA я получаю viewDidLoad. Но это так. Итак, все признаки означают умность UITabBarController сейчас;) и мне нужно выяснить, как это сделать, правильно?