4

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

我试过的是:

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

这只会导致应用程序崩溃无法找到我创建的方法。我认为我没有选择实现这一点的最佳途径,但我真的不确定我应该如何去做。

[更新] 施放返回的控制器tabBarController无效。

[已解决] 我试图将 a 投射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];
4

3 回答 3

2

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

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

于 2010-01-26T05:57:25.923 回答
1

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

于 2010-01-26T04:46:37.753 回答
0

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

  1. 注册您定义的 NotificationCenter 事件
  2. 使用新的选择器处理事件。我通常为它们使用 do/did 命名约定。

当事件发生时,您设置 selectedIndex。

于 2010-01-26T04:35:05.517 回答