所以我在我的应用程序中有一个UINavController,并且当用户按下后退按钮时我正在尝试执行一个方法。我到处搜寻,只能找到一些在上下文中没有意义的点点滴滴。
当用户按下后退按钮以关闭当前视图时,是否有办法实现某种检查? (弹出视图的viewWillDisappear方法由于某种原因永远不会被调用。我确实读过它,除非你转发那个电话吗?)听起来是否合适,是否有人有任何想法或建议?提前谢谢。
答案 0 :(得分:6)
看看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];
}
此代码保持对最后一个被推送的视图控制器的指针引用,这样一旦我们推送另一个,我们就可以弹出最后一个(如果它仍然存在)。
答案 1 :(得分:2)
AFAIK,如果您通过代码将UINavigationController添加到UIView,默认情况下它不会将这些消息发送到它的子视图。只有当UINavigationController本身接收到这些调用时才会执行此操作。也许这是你的问题(我不知道你的视图设置)。
因此,在添加UINavigationController的视图时,请务必手动将这些消息发送给它。
UINavigationController *navigationController = [UINavigationController alloc] initWithRootViewController:rootViewController];
[navigationController viewWillAppear:NO];
[aView addSubview:navigationController.view];
[navigationController viewDidAppear:NO];
至少,这是我在开发过程中发现的。一直在寻找这个,我仍然不明白它背后的理由。
答案 2 :(得分:0)
您可以随时隐藏默认的后退导航按钮,并使用自己的方法创建自己的按钮,以便在按下时调用。
执行您想要的任何代码,然后弹出视图。
答案 3 :(得分:0)
我使用了这个解决方案:
此解决方法的缺点:您将丢失那个漂亮的箭头形状的“后退”按钮。这也可以通过自定义图像解决。
所以这是我的代码。 把它放在你的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
}
不要忘记.h文件
- (void) backButtonPushed: (id)sender;
答案 4 :(得分:-1)
viewWillDisappear&弹出或关闭控制器时会调用viewDidDisappear。该函数在前端视图控制器上调用,而不是在UINavigationController本身上调用。您是否可能继承并忘记给超级电话打电话?