简而言之:我想拥有两个全屏视图,可以在视图A和视图B之间切换。我知道我可以只使用Tab Bar Controller,但我不想这样做。我想看看这是如何手工完成的,以了解引擎盖下的情况。
我有一个UIViewController充当根控制器:
@interface MyRootController : UIViewController {
IBOutlet UIView *contentView;
}
@property(nonatomic, retain) UIView *contentView;
@end
contentView连接到一个UIView,我将它作为子视图添加到Nib的“视图”中。这是绿色,我全屏显示。工作正常。
然后,我几乎以相同的方式创建了另外两个视图控制器。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中看到了视图。但是现在最大的问题是:视图控制器通常具有所有这些方法,例如:
(void)viewWillAppear:(BOOL)动画;
(void)viewDidDisappear:(BOOL)动画;
(void)viewDidLoad;
...等等。谁或什么,或者如果我没有选项卡栏控制器就以“我”的方式调用这些方法,该如何调用?我的意思是:如果我分配了ViewController的类,并且视图可见,那么我是否必须注意调用这些方法?它怎么知道viewWillAppear,viewDidDisappear或viewDidLoad?我相信Tab Bar Controller在引擎盖下具有所有这些“聪明”。还是我错了?
更新:我已经测试过了。如果释放视图控制器(例如:ViewControllerA),则在viewDidDisappear上不会收到任何日志消息。仅在分配和初始化ViewControllerA时,我才获得viewDidLoad。就是这样。因此,所有迹象现在都代表UITabBarController的聪明;),我必须弄清楚如何复制它,对吗?
白板的微信