简而言之:我想拥有两个全屏视图,可以在视图A和视图B之间切换。我知道我可以只使用Tab Bar Controller,但我不想这样做。我想看看这是如何手工完成的,以了解引擎盖下的情况。我有一个UIViewController充当根控制器:@interface MyRootController : UIViewController { IBOutlet UIView *contentView;}@property(nonatomic, retain) UIView *contentView;@endcontentView连接到一个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的聪明;),我必须弄清楚如何复制它,对吗?
3 回答
白板的微信
TA贡献1883条经验 获得超3个赞
如果我理解正确,那么您要完成的工作非常简单。
只需在您的应用程序委托上添加一个UINavigationController并执行:
[navigationController pushView:vcA];
代表将被相应地召集:
(void)viewWillAppear:(BOOL)动画;
(void)viewDidDisappear:(BOOL)动画;
(void)viewDidLoad;
当您要弹出视图并推入另一个视图时:
[navigationController popViewControllerAnimated:true];
[navigationController pushView:vcB];
如果您不希望显示navigationController,请使用:
[navigationBar setHidden:YES];
其中navigationBar是与您的UINavigationController对应的UINavigationBar。
- 3 回答
- 0 关注
- 464 浏览
添加回答
举报
0/150
提交
取消