导航控制器不推/弹出视图控制器

时间:2010-05-06 14:31:26

标签: iphone cocoa-touch

我正在开发一个基于视图的iPhone应用程序,它具有以下流程:

search -> (list | map) -> details

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

从上面提到的流程中可以看出,我想提供转换到详细信息视图的功能。列表视图中我的表格的每一行都包含一个详细信息披露按钮,用于允许用户深入查看详细信息视图。问题是,当我尝试将详细信息视图推送到导航堆栈时,没有任何反应。

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

- (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath {
 if (detailController == nil)
 {
  detailController = [[DetailsViewController alloc] init];
 }

 [self.navigationController pushViewController:detailController animated:YES];
}

假设我可能错过了一个指向导航控制器的指针,我在列表中显示了一个UINavigation属性并且映射视图(navigationController是只读的)并使用指向我的SwitchViewController导航控制器的指针初始化它们(负责切换的视图)当用户更改分段控件的值时,在列表/地图视图之间)。不幸的是,这并没有解决问题。

我是否在正确的轨道上?如果是这样,我怎么看到我的视图有一个指向正确导航控制器的指针?我应该添加一个委托,它允许我调用SwitchViewController中的一个函数转换到详细信息视图(这看起来很乱)?

3 个答案:

答案 0 :(得分:2)

你确定你有一个导航控制器吗?在您的代码中放置NSLog(@"%@",self.nagivationController);。如果它出现NULL,那么你就麻烦了。

另外,请尝试[self.parentViewController.navigationController pushViewController:detailController animated:YES];

答案 1 :(得分:2)

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

把这段代码

代表.h班

      MyViewController *viewController;

在委托.m班

 - (void)applicationDidFinishLaunching:(UIApplication *)application {    

UINavigationController *nvcontrol =[[UINavigationController alloc] initWithRootViewController:viewController];

[window addSubview:nvcontrol.view];

[window makeKeyAndVisible];

}

此处“MyViewController”应由viewcontroller替换。

在委托类中实现此功能后,您的代码将起作用。

所有最好的。

答案 2 :(得分:1)

我最终只是在列表和地图视图上创建委托,我用它来调用SwitchViewController上的方法来切换视图。我希望找到一种更清洁的方式,但这样做了。