gpt4 book ai didi

objective-c - 收到 NSNotification 后导航到特定的 UIViewController

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

我正在开发一个 iOS 应用程序,它使用 UINavigationController 处理 UIViewController 对象的层次结构:

MenuViewController
|
|-ListOfAnimalsViewController
|
|-AnimalDetailsViewController
|
|-ListOfPlantsViewController
|
|-PlantDetailsViewController

应用程序接收带有特定动物或植物信息的本地 NSNotification 对象。触摸通知时的通常行为是打开应用程序并加载层次结构中的第一个 View Controller 。

有没有办法以编程方式导航到层次结构深处的 UIViewController 实例?

编辑:我不是要求将 Controller 插入导航堆栈,而是要求将之前的 Controller 也插入,即我想保留上面的导航架构。

最佳答案

我不同意苏雷什的观点。虽然此解决方案可能适用于像这样的简单情况,您只有 1 个先前的 ViewController,但如果您想添加第 10 个 ViewController 并保留整个层次结构怎么办?首先,您必须通过每个 ViewController 传递您想要显示的最后一条数据(在本例中为植物或动物),并且您将同时创建 10 个 ViewController。当前 ViewController 和第 10 个 ViewController 之间的转换远非无缝,性能会很糟糕。也不需要去创建你自己的导航系统,不需要让事情变得比现在更复杂,因为这个问题并不太难。

只需按下要显示的 ViewController,这样您就只会创建 1 个 ViewController。在每个可以作为通知结果推送的 ViewController 中(以及下面的所有 ViewController),重写后退按钮的行为。使用 NSStringFromClass 检查 navigationController 的 viewControllers 属性,如果之前的 ViewController 是您期望的那个。如果没有,创建一个 NSMutableArray 作为 viewControllers 的副本,创建您期望的 ViewController 并将其插入数组中的倒数第二个位置。然后通过使用可变数组 animated NO 调用 navigationController 上的 setViewControllers:animated: 方法来替换整个堆栈。最后做流行音乐。同样,您将一次只创建 1 个 ViewController,从而保持最佳性能。

我现在无法发布代码,因为我使用的是 iPad,但如果您需要它,请尽管询问,当我有一个真正的键盘时,我会添加一个示例。

关于objective-c - 收到 NSNotification 后导航到特定的 UIViewController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13513707/

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