获取UINavigationBar委托以允许"返回",带有漂亮的动画

Mon*_*olo 9 cocoa-touch uinavigationbar uinavigationcontroller ios

iPhone上的场景:

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

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

    return YES;
}
Run Code Online (Sandbox Code Playgroud)

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

- (void)navigationBar:(UINavigationBar *)navigationBar didPopItem:(UINavigationItem *)item
Run Code Online (Sandbox Code Playgroud)

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

这看起来不错.

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

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

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

我知道我可以创建另一个左按钮代替后退按钮,但我发现使用委托更清洁,而且,我得到一个"真正的"后退按钮,这就是我想要的.

小智 3

如果您使用 UINavigationController,则无需自行管理。只需使用 UINavigationController 即可为您省去很多麻烦。它将负责弹出内容视图以及导航栏项目。