我在任何时候都只需要1个视图。我的目标是ios 6并使用arc。
我有一个MasterViewController,我的所有视图都继承自,所以他们都有这个方法:
-(void) showNextView:(UIViewController*)newController
{
[self.navigationController pushViewController:newController animated:true];
[self.navigationController popToViewController:newController animated:false];
[self viewDidChange];
}
因此,在MasterViewController的子类中,我们可能有:
-(IBAction)gameButtonPressed:(id)sender
{
if(sender == self.btnEmotion)
{
[self showNextView:[[EmotionViewController alloc] initWithNibName:nil bundle:nil]];
}
}
根视图控制器是导航栏。但基本上我是这样做的,所以只有1个视图。
但是,当我测试主视图控制器的dealloc时,它永远不会被调用。我不确定这是否意味着泄漏,或者是否是我不理解的事情。
我如何改变观点有什么不对吗?
由于
答案 0 :(得分:2)
[self.navigationController pushViewController:newController animated:true];
[self.navigationController popToViewController:newController animated:false];
这不符合你的想法。 newController
是推送后的顶视图控制器,因此pop不执行任何操作。因此,您只是在视图控制器上堆叠视图控制器。这就是为什么没有任何东西被解除分配的原因。
你可能试试这个:
[self.navigationController pushViewController:newController animated:YES];
[self.navigationController setViewControllers:newController animated:NO];
但我没有尝试过,而且我不清楚你想要完成什么,所以我什么都不保证......
然而,考虑到所有事情,我觉得这是对视图控制器的误用。听起来我更像是transitionFromView:toView:duration:options:completion:
的工作 - 也就是说,用动画替换另一个视图。