9

iPhone上的场景:

用户点击后退按钮,UINavigationBar委托方法(在 的子类中实现UINavigationController)返回YES,如下所示:

- (BOOL)navigationBar:(UINavigationBar *)navigationBar shouldPopItem:(UINavigationItem *)item
{
    // Verify stuff...

    return YES;
}

现在,根据文档,保持导航栏和内容同步是应用程序的责任,而这样做的地方是在委托方法中

- (void)navigationBar:(UINavigationBar *)navigationBar didPopItem:(UINavigationItem *)item

问题是,didPopItem只有在导航栏的弹出动画序列完成后才会调用,所以如果我[self popViewControllerAnimated: NO]在那里调用,最终结果是导航栏首先滑回,然后是内容。

这看起来是错误的。

pop...如果我在委托方法中调用导航控制器shouldPop...,我会收到一条错误消息,表明我正在重叠动画,并且最终状态不干净。

所以我的问题是,是否有另一种方法可以让 UINavigationController 更改内容,最好使用与导航栏同步的漂亮动画,但不会在导航栏和导航控制器之间造成混淆?

目标操作系统是 iOS 4.2 及更高版本。

我知道我可以创建另一个左按钮来代替后退按钮,但我发现使用委托更简洁,另外,我得到了一个“真正的”后退按钮,这正是我想要的。

4

2 回答 2

3

如果您使用的是 UINavigationController,则不需要自己管理它。只需使用 UINavigationController,您就可以省去很多麻烦。它将负责弹出内容视图以及导航栏项目。

于 2013-03-14T05:53:59.870 回答
1

尝试这个:

想象一下,你有 viewControllerA 和 viewControllerB。viewControllerA 是第一个,不需要导航栏,而 viewControllerB 需要。

在 viewControllerA中的方法viewWillAppear上放代码:

[self.navigationController setNavigationBarHidden:YES animated:YES];

当弹出 viewControllerB 时,您会使用动画。两个动画将自动同步。

不知道这对iOS4.2是否有效

于 2013-03-14T09:38:29.880 回答