0

私はタブバーアプリケーションを持っており、そのタブの1つにマップビューがあります。私はnavigationControllerをのNSLog場合、それがnullであるしかし...このコードを使用して、マップビュー上の注釈に開示ボタンをクリックしてから、新しいビューをプッシュする新しいビューをプッシュするとナビゲーションコントローラがnullになる

- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control { 

childController = [[AnnotationDetailView alloc] initWithNibName:@"AnnotationDetailView" bundle:nil];  

[self.navigationController pushViewController:childController animated:YES]; 

} 

をしようとしています。

他のタブでは、上記のコードを使用してビューをプッシュするテーブルビューがあります。それはなぜ機能するのですが、マップアノテーションはしません。

+0

あなたは 'nslog navigationController'どこからですか? –

+0

私は試してみると、ビューを押して – ChrisM

答えて

0

簡単な答えは、あなたのテーブルビューは、ナビゲーションコントローラ内であり、あなたのマップビューではないということです。タブビューコントローラは、実際にはナビゲーションコントローラ自体ではありません。

プロジェクトによっては、ナビゲーションコントローラがマップのタブのタブコントローラの直下にあるように、XIBを編集するだけの簡単な方法があります。マップビューコントローラはそのナビゲーションコントローラの子です。あなたのテーブルビューがどのように定義されているかを見て、あなたは何が違うかを見ることができるはずです。

+0

私はこのゲームには慣れていますが、勉強しようとしています。まだあまり確かではありませんが、もう少し詳しく読んでみる必要があります。 – ChrisM

+0

私はインターフェースビルダーですべてを設定しています。どのようにテーブルビューが定義されているかを見ることを意味しますか?それがどんなクラスに合っているのかを意味しますか? – ChrisM

+0

残念ながら、あなたの状況に到達する十数の方法があるので、あなたに有用な詳細を与えるのは難しいです。最終的には、あなたのテーブルビューがタブコントローラに「追加」されるような場所があります。それがどこにあっても、ナビゲーションコントローラが実際にタブコントローラに追加されていることがわかり、tableviewcontrollerがそのnavコントローラに追加されています。最も単純な例では、MainWindow.xibのドキュメントウィンドウでこの階層を見ることができ、マップビューのためにそれを模倣することができます。しかし、あなたの状況はより深刻なものかもしれません。 – adpalumbo

0

childControllerAnnotationDetailView * childController;と定義しましたか?

か、単に使用することができます。

AnnotationDetailView * childController = [[AnnotationDetailView alloc] initWithNibName:@"AnnotationDetailView" bundle:nil]; 
+0

ええ、私はそのことを忘れて – ChrisM

関連する問題