4

タブバー アプリケーションがあり、最初のタブにMKMapView. 私がやりたいことは、アプリケーションの別の場所から、アクティブなタブをマップビューに切り替え、前のビュー (マップビューに切り替えるボタンのあるもの) のデータに基づいてマップビューの領域を設定することです。

私が試したことは次のとおりです。

[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];
4

3 に答える 3

2

そのタブのメイン ビュー コントローラーは UINavigationController ではありませんか? その場合、UIMapViewController である必要があるルート ビュー コントローラーを取得できます。

他の場所から呼び出す場合は、AppDelegate に直接参照を配置することをお勧めします。

于 2010-01-26T05:57:25.923 に答える
1

AppDelegate を介してルーティングしないのはなぜですか? AppDelegate はUITabBarControllerとを持つことができますMKMapView(どちらもインターフェイス ビルダーを介して配線されます)。UIButtonハンドラーも AppDelegate に含まれ、 and を呼び出すことができ-[UITabBarController setSelectedView:]ます-[MKMapView setRegion:]

于 2010-01-26T04:46:37.753 に答える
0

あなたがしたいことは、UITabBarController のサブクラスまたはカテゴリを作成することです。

  1. 定義した NotificationCenter イベントの登録
  2. 新しいセレクターでイベントを処理します。私は通常、それらに do/did 命名規則を使用します。

イベントが発生したら、selectedIndex を設定します。

于 2010-01-26T04:35:05.517 に答える