简而言之:我想要两个全屏视图,可以在视图A和视图B之间切换。我知道我可以使用Tab Bar控制器,但我不想这样做。我想手动实现它,以便了解其内部运作方式。
我有一个UIViewController作为根控制器:
@interface MyRootController : UIViewController {
IBOutlet UIView *contentView;
}
@property(nonatomic, retain) UIView *contentView;
@end
contentView连接到一个UIView,我将其作为Nib的子视图添加到“view”中。它是绿色的,我可以全屏看到它,运行良好。
然后,我以基本相同的方式创建了另外两个视图控制器。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的视图。但现在的重要问题是:视图控制器通常具有所有这些方法,例如:
- (void)viewWillAppear:(BOOL)animated;
- (void)viewDidDisappear:(BOOL)animated;
- (void)viewDidLoad;
更新:我已经测试过了。如果我释放视图控制器(例如:ViewControllerA),我将不会收到viewDidDisappear上的任何日志消息。只有在分配和初始化ViewControllerA时,我会获得一个viewDidLoad。但就是这样。因此,所有迹象都表明UITabBarController非常“聪明”,而我必须找出如何复制它,对吗?