我将从导航堆栈中删除所有视图,然后创建一个新控制器(来自故事板)并将其添加为堆栈中的唯一控制器。问题是在实例化新控制器时,从不调用viewDidLoad(使用断点检查)。任何想法为什么会这样?代码如下。
[self.collectionView.collectionViewLayout invalidateLayout];
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
PFGridPageViewController *nc = [storyboard instantiateViewControllerWithIdentifier:@"GridPageVC"];
[self.navigationController setViewControllers:nil];
NSArray *new = [[NSArray alloc] initWithObjects:nc, nil];
[self.navigationController setViewControllers:new];
临时解决方案
正如您在Ian对已接受答案的讨论中所看到的,修改导航堆栈是一个坏主意。我在做一些更好的工作时想出了一个临时解决方案。基本上我使用popToRoot和pushVC然后修改堆栈一次以删除索引0处的VC。
[self.navigationController popToRootViewControllerAnimated:NO];
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
PFGridPageViewController *nc = [storyboard instantiateViewControllerWithIdentifier:@"GridPageVC"];
[self.navigationController pushViewController:nc animated:NO];
NSMutableArray *controllers = [NSMutableArray arrayWithArray:self.navigationController.viewControllers];
[controllers removeObjectAtIndex:0];
[self.navigationController setViewControllers:controllers];
答案 0 :(得分:1)
viewDidLoad
的{{1}}属性时,才会调用 .view
。这似乎是一种非常规的UIViewController
方式。
如果您确定您的实施(我不是),只需在此处添加此行,它就会为您致电[self.navigationController pushViewController:nc animated:NO]
:
viewDidLoad