私のストーリーボード(上記を参照)には、注釈付きのMKMapViewを保持するViewControllerがあります。これらの注釈には開示アイコンがあり、タップすると、ユーザーを別のViewControllerにナビゲートする必要があります。そのために、ビューコントローラー間にプッシュセグエを作成しました。次に、「showDetail」の識別子を指定し、次のコードを実装しました。
- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control
{
[self performSegueWithIdentifier:@"showDetail" sender:self];
}
ただし、次のエラーが発生します。
Could not find a navigation controller for segue 'showDetail'. Push segues can only be used when the source controller is managed by an instance of UINavigationController.'
どこがいけないの?ソースのUIViewControllerをUINavigationControllerに変更しようとしましたが、ビューは黒い画面として表示されます。
実際には、UIViewControllerをUINavigationControllerのルートコントローラーとして設定する必要があります(または、navcontrollerのあるビューコントローラーからプッシュスルーします)。そうするために
これを行う最も簡単な方法は、ナビゲーション階層のルートにしたいビューコントローラーを選択し、
Editor > Embed In > Navigation Controller
これにより、新しいナビゲーションコントローラが作成され、すべてが接続されます。
この手順を確認してください。1. 2つのビューコントローラ間の接続をクリックします。 2.属性インスペクタをクリックします3.識別子を「showDetail」に設定します。 4.保存して実行します。