UINavigationController自定义popViewControllerAnimated方法

时间:2011-11-11 17:04:06

标签: iphone objective-c uinavigationcontroller uinavigationbar

我已经制作了一个自定义的UINavigationController类,这样我就可以有一个UIAlertView弹出窗口,并说,你确定要在点击后退按钮时离开这个视图。

我的客户方法如下:

- (UIViewController *)popViewControllerAnimated:(BOOL)animated
{
    if([[self.viewControllers lastObject] class] == [weddingSetupController class]){

        UIAlertView *exitAlert = [[UIAlertView alloc] 
                                  initWithTitle:@"Are you sure?" 
                                  message:@"By leaving the setup, all current changes will be lost. The setup can be retsrated later if you decide to leave now. However, it is recomened for your best experience that you complete the setup." 
                                  delegate:self cancelButtonTitle:@"No" 
                                  otherButtonTitles:@"Yes", nil
                                  ];

        [exitAlert show];

        return nil;
    } 
    else {
        return [super popViewControllerAnimated:animated];
    }
}

它的效果很好,虽然问题在于,如果我说“不”,它会保持在同一个视图上,而不会弹出父视图,导航栏会弹出。所以我得到的视图不是弹出,但是栏总是返回到其父视图的状态。

希望这有意义并且可以帮助我解决这个问题,谢谢。

2 个答案:

答案 0 :(得分:3)

当您按导航栏上的后退按钮时,它正在呼叫:

- (UINavigationItem *)popNavigationItemAnimated:(BOOL)animated;
UINavigationBar中的

,它又在导航控制器上调用popViewControllerAnimated。重写此方法(我使用类别,以避免子类化)并采取相同的方法。你的压倒一切只是迟到了一步。

答案 1 :(得分:1)

我认为理想情况下,用户永远不必“保存”任何东西 - 一切都是隐式保存的。因此,如果他们离开设置并稍后返回,他们应该能够从中断的地方恢复。

但是如果你仍然想这样做,最好使用顶部有“取消”和“完成”按钮的模态视图。现在我想起来了,Mail会要求你用动作表保存一份未发送的草稿。