如何在不使用导航栏的情况下从导航堆栈中弹出控制器

Posted

技术标签:

【中文标题】如何在不使用导航栏的情况下从导航堆栈中弹出控制器【英文标题】:how to pop a controller off the navigation stack without using the navigation bar 【发布时间】:2010-07-14 18:29:09 【问题描述】:

我正在尝试使用一些分层视图来实现导航控制器。我想使用常规的 UIViewController 来呈现向下钻取的选择,我不想使用导航栏 - 我想拥有自己的自定义按钮来返回一个级别。

我看到这样的例子:

[[self navigationController] pushViewController:nextViewController animated:YES];

我的问题是:navigationController 是所有 UIViewController 的属性吗?无论堆栈上的视图如何,我都可以参考self.navigationController 吗?如果我在任意视图中,我可以有一个按钮操作,其中包含类似[self.navigationController popToRootViewController animated:YES];

我展示的每个视图都需要一个按钮来返回上一个视图或根视图,具体取决于具体情况。我想在每个视图控制器中创建该按钮并控制它返回到堆栈中的哪个视图。我在正确的轨道上吗?

【问题讨论】:

【参考方案1】:

navigationController 是所有 UIViewController 的属性吗?

是的。

无论堆栈上的视图如何,我都可以引用 self.navigationController 吗?

UINavigationController 的堆栈上的每个 UIViewController 在调用 navigationController 时都会返回 UINavigationController 对象。

如果我在任意视图中,我可以有一个包含[self.navigationController popToRootViewControllerAnimated:YES]; 之类的按钮操作

是的。 popToRootViewControllerAnimated: 会将用户带到UINavigationController 的根目录UIViewController,您可以使用[self.navigationController popViewControllerAnimated:YES]; 弹出顶部UIViewController。最后一个与点击Back UIBarButtonItem 的作用相同。

我走对了吗?

是的:)

【讨论】:

谢谢!我仍然处于学习曲线的陡峭部分,但每一步都非常有益。几个月前看这个导航控制器的东西对我来说完全是胡言乱语,现在它看起来(相当)清晰。如果没有 Stack Overflow,我早就放弃了。很好,明确的答案! 信不信由你,但就在 4 个月前,我对 C、Objective-C、Cocoa Touch 或 iPhone 应用程序开发一无所知 :)在学习它时(读几本书,从头开始自己构建一个应用程序),在不知不觉中你就在 Stack Overflow 上回答其他人的问题;) 我现在正在开始 iPhone 3 开发工作,接下来将获得游戏书。顺便说一句,这很好用。我可以将一个新控制器推入堆栈并将其弹出,然后摆脱导航栏。我的两个新问题是:当我推动新控制器时,我立即提出一个模态视图来做出选择 - 我如何让底层视图等到模态出现才可见(你可以看到它滑入模态向上滑动时的左侧)。然后,如何将选择信息从模态返回到底层控制器? 我阅读了《开始 iPhone 3 开发》和《更多 iPhone 3 开发》,如果您想更深入地了解 Core Data 和更高级的 API 等内容,我真的建议您阅读后者。我也尽快拿到了《iPhone 游戏开发入门》这本书。 我认为最聪明的做法是先呈现模态VC,完成后,将另一个VC推入导航堆栈,您无法真正阻止VC被滑入...获得从模态呈现的 VC 到呈现 VC 的选择信息,您可以使用委托。将模态 VC 上的 delegate 设置为呈现 VC,以便模态 VC 可以在做出选择时进行报告。

以上是关于如何在不使用导航栏的情况下从导航堆栈中弹出控制器的主要内容,如果未能解决你的问题,请参考以下文章

从导航堆栈中弹出视图控制器时从右侧滑入

有没有办法找出视图控制器是不是从导航堆栈中弹出?

UICollectionView 调用 scrollViewDidScroll:从导航堆栈中弹出时

为啥从导航堆栈中弹出视图时键盘不显示?

从堆栈中弹出导航控制器/创建双视图

在导航控制器中弹出到根视图