代码之家  ›  专栏  ›  技术社区  ›  senfo

导航控制器未按下/弹出视图控制器

  •  0
  • senfo  · 技术社区  · 15 年前

    我正在开发一个基于视图的iphone应用程序,其流程如下:

    search -> (list | map) -> details

    为了完成视图之间的转换,我有一个uinavigationcontroller,搜索视图控制器是根。用户执行搜索后,我将转换到具有分段控件的视图,该控件充当选项卡,在列表和映射功能之间进行切换(根据 related question 我有过)。此视图包含一个uiviewcontroller,当用户点击分段控件时,它允许我在列表/映射视图之间切换。直到现在我都很好。换句话说,我能够从搜索视图转换到switchviewcontroller,它负责允许我在列表视图和地图视图之间切换。从switchviewcontroller,我还可以切换回search视图。

    从上面提到的流程中可以看到,我想提供转换到详细信息视图的能力。列表视图中表的每一行都包含一个details disclosure按钮,允许用户向下钻取到一个details视图中。问题是,当我试图将details视图推到导航堆栈上时,什么都没有发生。

    下面是委托方法(来自我的列表视图控制器),用于处理正在点击的详细信息披露按钮。我已经设置了断点,所以我知道代码正在运行。导航控制器只是不想把detailscontroller推到堆栈上(我猜我没有指向正确uinavigationcontroller的指针)。

    - (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath {
     if (detailController == nil)
     {
      detailController = [[DetailsViewController alloc] init];
     }
    
     [self.navigationController pushViewController:detailController animated:YES];
    }

    假设我可能缺少一个指向导航控制器的指针,我在列表和地图视图上公开了一个uinavigation属性(navigation controller是只读的),并用switchviewcontroller(负责切换bet的视图)中指向导航控制器的指针初始化了它们当用户更改分段控件的值时,显示列表/地图视图。不幸的是,这并没有解决问题。

    我走对了吗?如果是,我如何确保我的视图有指向正确导航控制器的指针?我是否应该添加一个委托,它允许我在switchviewcontroller中调用一个转换到details视图的函数(这看起来很混乱)?

    3 回复  |  直到 15 年前
        1
  •  2
  •   Pyro2927    15 年前

    你确定你有导航控制器吗?在你的代码中 NSLog(@"%@",self.nagivationController); . 如果结果是空的,那你就有麻烦了。

    还有,试试看 [self.parentViewController.navigationController pushViewController:detailController animated:YES]; .

        2
  •  2
  •   Warrior    15 年前

    在基于视图的应用程序中实现导航控制器。

    输入此代码

    代表H班

          MyViewController *viewController;
    

    在代理类中

     - (void)applicationDidFinishLaunching:(UIApplication *)application {    
    
    UINavigationController *nvcontrol =[[UINavigationController alloc] initWithRootViewController:viewController];
    
    [window addSubview:nvcontrol.view];
    
    [window makeKeyAndVisible];
    
    }
    

    这里“myviewcontroller”应该被viewcontroller替换。

    在委托类中实现此功能后,代码将工作。

    一切顺利。

        3
  •  1
  •   senfo    15 年前

    最后,我只是在列表视图和映射视图上创建了委托,我用它来调用switchviewcontroller上的方法来切换视图。我本想找个更干净的方法,但这成功了。