通过选项卡栏访问MKMapView

时间:2010-01-26 02:08:18

标签: iphone objective-c uitabbarcontroller mapkit mkmapview

我有一个tabbar应用程序,在第一个标签上我有一个MKMapView。我想要做的是从应用程序的其他地方,将活动选项卡切换到mapview并根据上一个视图中的数据设置mapview的区域(带有切换到mapview的按钮的数据)。

我尝试的是:

[self.tabBarController setSelectedView:0];
UIMapViewController *mapView = [self.tabBarController.viewControllers objectAtIndex:0];
[mapView displayBookmarkAnnotation:bookmark];

这只会导致应用程序崩溃,无法找到我创建的方法。 我不认为我选择了实现这一目标的最佳途径,但我真的不确定应该怎么做。

[更新] 转换tabBarController返回的控制器没有任何效果。

[解决] 我试图将UINavigationController投射到我的mapView

[self.tabBarController setSelectedView:0];
UINavigationController *navController = [self.tabBarController.viewControllers objectAtIndex:0];
//if the tab has other views open, return to mapView
[navController popToRootViewControllerAnimated:YES];
UIMapViewController *mapView = (UIMapViewController *)[navController visibleViewController];
[mapView customMessage:object];

3 个答案:

答案 0 :(得分:2)

您确定该标签的主视图控制器不是UINavigationController吗?如果是这样,您可以获得应该是您的UIMapViewController的根视图控制器。

如果要从其他地方调用它,最好在AppDelegate中直接引用。

答案 1 :(得分:1)

为什么不通过你的AppDelegate路由它? AppDelegate可以有一个UITabBarControllerMKMapView(两个都通过接口构建器连接。)UIButton处理程序也可以在AppDelegate中,以便它可以调用-[UITabBarController setSelectedView:]-[MKMapView setRegion:]

答案 2 :(得分:0)

你想要做的是创建一个子类或UITabBarController的类别

  1. 注册您定义的NotificationCenter事件
  2. 使用新选择器处理事件。我通常使用do / did命名约定。
  3. 当事件发生时,您设置selectedIndex。