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

Posted

技术标签:

【中文标题】使用导航控制器从 mapView 推送详细视图【英文标题】:Push a detail view from mapView with a Navigation Controller 【发布时间】:2013-09-08 07:37:33 【问题描述】:

我有一个选项卡式应用程序,其中一个选项卡是地图视图。用户将图钉放置在某个位置,并且在注释标注中有一个披露按钮。我希望此按钮可以推送到包含有关注释的更具体详细信息的详细信息视图。我已经搜索了相关问题,但似乎没有一个问题与我有同样的问题。单击公开按钮时,应用程序崩溃并出现异常:'NSInvalidArgumentException',原因:'-[MapView tableView]: unrecognized selector sent to instance 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];

我在应用委托中实例化了导航控制器:

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 的导航控制器的任何信息。或者为什么它在这种情况下不起作用。

【问题讨论】:

异常显示“MapView”而不是“MKMapView”,所以你有一个名为“MapView”的自定义类吗?您是否确定了导致该异常的 exact 行(在调试器中逐行执行代码)?它可能是 setSelectedSpot 中的东西吗?也许异常发生在 DetailViewController 的 viewDidLoad 中,它在被推送时被调用。 是的,我有一个名为 Map View 的 ViewController 类,其中包含 MKMapView。导致异常的确切行正在推送详细视图。详细视图有效,因为使用选项卡视图控制器,我还有一个 tableView,其中包含所有注释对象和这些作品的详细视图,并且与我试图从地图中推送的详细视图相同。 【参考方案1】:

我强烈建议使用情节提要。创建一个标签栏控制器。创建一个带有2个viewcontroller的navigationcontroller:第一个是地图iewcontroller,第二个是detailviewcontroller。将此导航控制器设为 tabbarcontrollers viewcontrollers 之一。 在您的 calloutaccessorytapped 方法中,使用您在 storyboatd 中定义的标识符调用 performSegue。

【讨论】:

好吧,我想我将不得不尝试使用情节提要。谢谢!【参考方案2】:

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

【讨论】:

以上是关于使用导航控制器从 mapView 推送详细视图的主要内容,如果未能解决你的问题,请参考以下文章

在持久化 UIView 的同时推送 navigationController

从推送视图访问第一个导航控制器中的方法和变量

从视图控制器显示(例如推送)到导航控制器有效?!为啥?

从嵌套在 UITabBarController 中的导航控制器推送视图控制器?

如何从 NSObject 类获取导航控制器并在 ios 中推送视图控制器

导航控制器推送零视图控制器错误