我正在开发一个基于视图的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中的一个函数转换到详细信息视图(这看起来很乱)?
答案 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上的方法来切换视图。我希望找到一种更清洁的方式,但这样做了。