【问题标题】:UINavigationController popViewController is popping everything!UINavigationController popViewController 正在弹出所有内容!
【发布时间】:2009-09-22 10:13:40
【问题描述】:

所以我试图在发生错误时将视图控制器从堆栈中弹出,但它似乎一次性弹出太多。顶部的导航栏失去了它的标题和按钮,但旧的表格视图数据仍然可见。我不知道发生了什么......

基本设置是:

  • 选项卡视图模板
    • 导航控制器
      • 视图控制器(从 xib 加载)
      • 视图控制器(推,我想弹出)

代码如下:

NSLog(@"%@", [[self navigationController] viewControllers]);
[[self navigationController] popViewControllerAnimated:NO];
NSLog(@"%@", [[self navigationController] viewControllers]);

生成的 NSLog 显示:

2009-09-22 19:57:14.115 App[34707:550b] (
    <MyViewController: 0xd38a70>,
    <MyViewController: 0xd36b50>
)
2009-09-22 19:57:14.115 App[34707:550b] (null)

有人有这方面的经验吗?

【问题讨论】:

    标签: iphone cocoa-touch uikit uinavigationcontroller


    【解决方案1】:

    我看到一些奇怪的 UINavigationController 仅使用堆栈行为

    [self.navigationController popViewControllerAnimated:YES];
    

    tableView:didSelectRowAtIndexPath: 调用中调用的委托内部。

    视图无法正常工作,UINavigationController 提供的“返回”操作无法正确弹出此委托的视图,返回另一个级别。

    我发现如果我用过

    [self.navigationController popToViewController:self animated:YES];
    

    相反,突然间一切正常。这是在启用 ARC 的应用程序中。
    所以,我只能猜测有一些参考内务处理不会正确发生,除非你告诉它在弹出一个视图控制器时弹出一个特定的视图控制器,该视图控制器将立即被该弹出“未引用”。

    【讨论】:

      【解决方案2】:

      我修好了。弹出视图的代码在 viewDidLoad 中被调用。这意味着它在视图完全动画化之前就被弹出了。

      我将该代码移至 viewDidAppear,现在它可以像宣传的那样工作了。

      【讨论】:

        【解决方案3】:
        [[self navigationController] popViewControllerAnimated:NO];
        //here you pop **self** from navigation controller. And now 
        [self navigationController] == nil;   
        // And 
        [nil viewControllers] == nil
        

        尝试这样做:

        UINavigationController *nc = [self navigationController];
        NSLog(@"%@", [nc viewControllers]);
        [nc popViewControllerAnimated:NO];
        NSLog(@"%@", [nc viewControllers]);
        

        【讨论】:

        • 好的,这表明它没有清空整个堆栈。但它仍然没有达到预期的效果。 UITableView 仍然存在,而导航控件消失(但留下背景渐变,“栏”)...
        【解决方案4】:

        怎么了?

        [self.navigationController popViewControllerAnimated:NO];
        

        另外,您可能想检查如何将ViewController 压入堆栈。听起来有些不对劲。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多