Доступ к MKMapView через панель вкладок - PullRequest
4 голосов
/ 26 января 2010

У меня есть приложение с вкладками, и на первой вкладке у меня есть MKMapView. То, что я хочу сделать, это откуда-то еще в приложении, переключить активную вкладку на вид карты и установить регион карты на основе данных в предыдущем виде (тот, который имеет кнопку для переключения на вид карты).

Что я пробовал:

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

Это просто приводит к сбою приложения, не позволяющему найти созданный мною метод. Я не думаю, что выбрал лучший путь для реализации этого, но я действительно не уверен, как мне поступить.

[Update] Приведение контроллера, возвращенного 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 ]

2 голосов
/ 26 января 2010

Вы уверены, что контроллер основного представления для этой вкладки не является UINavigationController? Если это так, вы можете получить контроллер корневого представления для того, который должен быть вашим UIMapViewController.

Было бы хорошо поместить прямую ссылку в AppDelegate, хотя, если вы собираетесь вызывать ее из другого места.

1 голос
/ 26 января 2010

Почему бы не направить его через ваш AppDelegate? AppDelegate может иметь UITabBarController и MKMapView (оба связаны через построитель интерфейса). Обработчик UIButton также будет в AppDelegate, чтобы он мог вызывать -[UITabBarController setSelectedView:] и -[MKMapView setRegion:].

0 голосов
/ 26 января 2010

То, что вы хотите сделать, это создать подкласс или категорию UITabBarController, который

  1. регистрирует для событий NotificationCenter, которые вы определяете
  2. обрабатывает события с новым селектором. Я обычно использую соглашение об именовании do / did для них.

Когда событие проходит, вы устанавливаете selectedIndex.

...