这可能听起来像一个新手问题,但我是iOS开发新手。
我在navigationController中推送了一个视图,假设它是第3个推送视图。
在该视图中,我设置了self.navigationController.delegate = self;
。我已经更改了委托,因为我需要处理用户转到上一个视图的情况,即从当前视图弹出。
- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
if ([[viewController class] isEqual:[MainViewController class]]) {
...
}
}
它工作正常,但当我弹出当前视图并再次按导航后退按钮(即切换到第一个推送视图)时,我的访问错误。
那么我缺少什么? 处理导航后退按钮的正确方法是什么?
答案 0 :(得分:3)
这是因为导航控制器向弹出和取消分配的视图控制器发送消息,每次执行弹出和推送时都必须设置委托。还要将self.navigationController.delegate = nil;
添加到viewController的dealloc方法。
答案 1 :(得分:0)
将下面放在您指定self.navigationController.delegate = self
的Viewcontroller中-(void) viewWillDisappear:(BOOL) animated
{
[super viewWillDisappear:animated];
if ([self isMovingFromParentViewController])
{
if (self.navigationController.delegate == self)
{
self.navigationController.delegate = nil;
}
}
}