原来代码是在viewDidAppear函数中pushViewController,
-(void)viewDidAppear:(BOOL)animated{
[super viewDidAppear:animated];
CCRLoginViewController *controller=[[CCRLoginViewController alloc] initWithNibName:@"CCRLoginViewController" bundle:nil];
controller.hidesBottomBarWhenPushed = NO;
controller.showBackButton = NO;
[self.navigationController pushViewController:controller animated:NO];
[controller release];
return;
}
由于viewDidAppear是在视图完成后执行的,要求改进为在viewWillAppear函数中执行,出现问题
-(void)viewWillAppear:(BOOL)animated{
[super viewDidAppear:animated];
CCRLoginViewController *controller=[[CCRLoginViewController alloc] initWithNibName:@"CCRLoginViewController" bundle:nil];
controller.hidesBottomBarWhenPushed = NO;
controller.showBackButton = NO;
[self.navigationController pushViewController:controller animated:NO];
[controller release];
return;
}
在push之后, controller的view虽然存在于navigationController的view的subviews中,但是无法显示出来, 在连续点击之后,会出现黑屏现象. 发现在viewWillAppear中pushViewControoler之后,viewDidAppear函数不会执行,也会影响到子controller的绘制. 再试过各种方法之后,发现pushViewController在viewWillAppear函数中不可行,
解决方法是不用push函数,而是直接执行navigationController的setViewControllers函数,直接设置为新的controller,原来的旧controller从堆栈中移除.
-(void)viewWillAppear:(BOOL)animated{
[super viewDidAppear:animated];
CCRLoginViewController *controller=[[CCRLoginViewController alloc] initWithNibName:@"CCRLoginViewController" bundle:nil];
controller.hidesBottomBarWhenPushed = NO;
controller.showBackButton = NO;
[self.navigationController setViewControllers:[[NSArray alloc]initWithObjects:controller, nil]];
[controller release];
return;
奇怪的是,发现如果将pushViewController的animated不设为NO而设为YES, 也是可行的, 非常奇怪,原因还不清楚.