gpt4 book ai didi

objective-c - 如何/是否模拟 UINavigationController pushToViewController 方法

转载 作者:行者123 更新时间:2023-11-29 13:40:03 25 4
gpt4 key购买 nike

我正在为一个 iOS 应用程序设计界面,其中有分层导航模式和任意 View 交换模式。一种模式下任何给定 View 的布局都不同于另一种模式下相应 View 的布局。

我希望用户能够在这些模式之间来回切换。假设一个独立的 subview 有一个相应的详细 View ,它在 UINavigationController 的层次结构中向下 2 层。用户应该能够直接切换到该导航详细信息 View 。从那里,他应该能够在 UINavigationController 层次结构中上下导航,或者切换回他来自的独立 subview 。

UINavigationController 有一个方法 popToViewController:animated: 可以让你在导航回 up 层次结构时跳过级别,但它没有相应的 pushToViewController:animated : 这会让您直接跳转到层次结构中的较低级别。这是有道理的——导航 Controller 必须在显示目标 View 之前将中间 View 压入堆栈。但是常规的推送方法显示中间 View ,我认为这会导致视觉闪光并严重影响性能。

如果我通过连续两次调用 pushViewController 来模拟 pushToViewController,将 animated:NO 用于中间 View 并将中间 View 临时设置为保持透明,我会得到合理的表现吗?或者,当请求导航模式时,我是否应该将导航 Controller 的堆栈放在隔离 View 的后面,多次调用 pushViewController,,然后将导航 Controller 移动到正面?或者我应该完全放弃使用 UINavigationController 并通过 UIView 的 add/remove/insert/exchangeSubview 手动完成所有表格 View 样式的导航吗?

最佳答案

我相信 setViewControllers:animated: 会帮助您做您想做的事。

当您想将多个 View Controller 添加到堆栈并直接转到最后一个时,您可以显式设置整个堆栈并让 UINavigationController 动画导航直接到最后一个。

NSMutableArray* controllers = [NSMutableArray arrayWithArray:[self.navigationController viewControllers]];
[controllers addObject:newController1];
[controllers addObject:newController2];
[self.navigationController setViewControllers:controllers animated:YES];

这会将 newController1newController2 推送到您的 View 堆栈,并以动画方式过渡到 newController2

关于objective-c - 如何/是否模拟 UINavigationController pushToViewController 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9435880/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com