我在我的应用程序中有一个UINavController,并试图在用户按下返回按钮时执行一个方法。 我已经搜索了所有地方,只能找到一些不太合理的碎片。
是否有一种实现某种检查的方法,以捕获当用户按下返回按钮以关闭当前视图时的情况? (对于要弹出的视图,viewWillDisappear方法永远不会被调用,原因是什么我不知道。我确实读过,除非您转发该调用?)这听起来正确吗? 有人有什么想法或建议吗? 提前致谢。
我在我的应用程序中有一个UINavController,并试图在用户按下返回按钮时执行一个方法。 我已经搜索了所有地方,只能找到一些不太合理的碎片。
是否有一种实现某种检查的方法,以捕获当用户按下返回按钮以关闭当前视图时的情况? (对于要弹出的视图,viewWillDisappear方法永远不会被调用,原因是什么我不知道。我确实读过,除非您转发该调用?)这听起来正确吗? 有人有什么想法或建议吗? 提前致谢。
看一下UINavigationControllerDelegate
。当一个UIViewController被推到导航控制器栈时,只有两个方法会被调用。同样地,如果有一个视图控制器正在被推送,那么可能刚刚有一个视图控制器被弹出了。这就是我调用viewDidDisappear
和viewWillDisappear
的方法。
# pragma mark - UINavigationControllerDelegate Methods
- (void)navigationController:(UINavigationController *)navigationController
willShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
static UIViewController *vcPointer = nil;
// If the previous view controller is still around then let's send a viewWillDisappear message
if (vcPointer != nil) {
if ([vcPointer respondsToSelector:@selector(viewWillDisappear:)]) {
[vcPointer viewWillDisappear:animated];
}
}
// Keep track of a pointer to the current viewController
vcPointer = viewController;
[viewController viewWillAppear:animated];
}
UINavigationController *navigationController = [UINavigationController alloc] initWithRootViewController:rootViewController];
[navigationController viewWillAppear:NO];
[aView addSubview:navigationController.view];
[navigationController viewDidAppear:NO];
至少在开发过程中,这是我发现的。我已经寻找了很长时间,但我仍然不明白背后的原理。
我使用了这个解决方案:
这种解决方法的缺点是:你将失去那个漂亮的箭头形状的“返回”按钮。也可以用自定义图片解决。
所以这是我的代码。将其放在viewDidLoad中:
// LeftButton in Navigation Bar
UIBarButtonItem *leftBarButton = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:self action:@selector(backButtonPushed:)];
self.navigationItem.leftBarButtonItem = leftBarButton;
[leftBarButton release];
然后在相同的 .m 文件中添加此方法:
- (void) backButtonPushed: (id)sender {
// do what you want to do
}
- (void) backButtonPushed: (id)sender;
您可以随时隐藏默认的返回导航按钮,并创建自己的按钮,当按下时调用其自己的方法。
在那里执行任何代码,然后弹出视图。
当控制器被弹出或解散时,将调用viewWillDisappear和viewDidDisappear函数。该函数在前台视图控制器上调用,而不是在UINavigationController本身上调用。您可能会忘记在某些内容上调用超级子类化吗?