【问题标题】:Is there any way to remove specific view controller from UINavigationController's stack?有没有办法从 UINavigationController 的堆栈中删除特定的视图控制器?
【发布时间】:2012-03-02 01:55:35
【问题描述】:

我想从 UINavigationController 的堆栈中删除一个 viewController。

有可能吗?我发现 UINavigationController.viewControllers 是 NSArray 的一种类型,这意味着我不能改变。

我也知道我可以使用 popViewController() 或 pushViewController() 更改堆栈 (NSArray)。怎么可能?

我可以将 UINavigationController 中的特定 viewController 更改为其他 viewController 吗?或者有没有办法从堆栈中删除一个 viewController?

【问题讨论】:

    标签: objective-c xcode uinavigationcontroller stack


    【解决方案1】:

    这会做你想做的事:

    NSMutableArray * viewControllers = [ <<navController>>.viewControllers mutableCopy ]
    [ viewControllers removeObject:<<viewControllerToRemove>> ] ;
    navController.viewControllers = viewControllers ;
    

    但这对我来说听起来很“有趣”——我能问一下你为什么要实现这种行为吗?

    【讨论】:

    • 谢谢!!在我测试之后,我会发布我这样做的原因。
    • [viewControllers mutableCopy] 是 类型,所以我只是将它转换为 NSMutableArray 像这样。 [((NSMutableArray *)[viewControllers mutableCopy].... 我尝试删除索引 0 处的对象。但我无法删除对象。[navigationController.viewControllers 计数] 没有改变。
    • 无需投射。您可以向id 发送任何消息。之前和之后的 viewControllers 是什么?
    • 您的代码缺少一个赋值 - 您创建和修改可变副本而没有获得指向它的指针,因此 viewControllers 本身永远不会被修改。它应该是 NSMutableArray *newControllers = [[viewControllers mutableCopy...
    • 好的,我找到了它不起作用的原因。我试图在 pushView 动画完成之前删除 ViewController。再次感谢!
    猜你喜欢
    • 2011-01-07
    • 1970-01-01
    • 1970-01-01
    • 2017-04-19
    • 2012-05-04
    • 1970-01-01
    • 2011-02-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多