使用导航控制器从mapView推送详细视图

时间:2013-09-08 07:37:33

标签: ios objective-c uinavigationcontroller mkmapview pushviewcontroller

我有一个标签式应用程序,其中一个标签是地图视图。用户将销钉放置在一个位置,并且在注释标注中有一个公开按钮。我希望此按钮可以推送到详细视图,其中包含有关注释的更多特定详细信息。我已经搜索了相关的问题,但它们似乎都没有像我一样有问题。单击公开按钮时,应用程序崩溃并出现异常:'NSInvalidArgumentException',原因:' - [MapView tableView]:无法识别的选择器发送到实例0x8434360'

这是我尝试推送详细视图控制器的地方。 log语句返回导航控制器,因此不是向nil发送消息的问题。

- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control

{

DetailViewController *dvc = [[DetailViewController alloc] init];
NSLog(@"%@", [self navigationController]);
[[SpotsStore defaultStore] setSelectedSpot:[view annotation]];
[[self navigationController] pushViewController:dvc animated:YES];

}

我在app delegate中实例化导航控制器:

UINavigationController *mapnc = [[UINavigationController alloc] initWithRootViewController:mv];
[mapnc setNavigationBarHidden:NO];
[[mapnc tabBarItem] setTitle:@"Map"];
[[mapnc tabBarItem] setImage:[UIImage imageNamed:@"mapicon.png"]];
[tbc setViewControllers:[NSArray arrayWithObjects:nc,mapnc, nil]];
// nc is a different navigation controller I instantiated earlier.
[[self window] setRootViewController:tbc];

我真的很想得到任何帮助,或者只是向我发送正确的方向。我找不到任何关于发送方法tableView的导航控制器的信息。或者为什么它在这种情况下不起作用。

2 个答案:

答案 0 :(得分:0)

我会强烈推荐使用故事板。创建一个tabbarcontroller。创建一个带有2个viewcontrollers的navigationcontroller:第一个是map iewcontroller,第二个是detailviewcontroller。将此导航控制器作为tabbarcontrollers视图控制器之一。 在calloutaccessorytapped方法中,使用您在storyboatd中定义的标识符调用performSegue。

答案 1 :(得分:0)

我发现了问题。这是我的详细视图viewWillAppear方法中的一段代码,其中我重新加载了tableView。谢谢你的帮助!