web-dev-qa-db-ja.com

2つのView Controller間のセグエ

enter image description here

私のストーリーボード(上記を参照)には、注釈付きの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に変更しようとしましたが、ビューは黒い画面として表示されます。

14
Jonathan

実際には、UIViewControllerをUINavigationControllerのルートコントローラーとして設定する必要があります(または、navcontrollerのあるビューコントローラーからプッシュスルーします)。そうするために

  • 新しいナビゲーションコントローラーをストーリーボードにドラッグします-デフォルトではテーブルビューコントローラーにアタッチされます
  • Tableviewコントローラーを削除するnavgiationコントローラーを右クリックし、「ルートビューコントローラー」プロパティを既存のビューコントローラーに接続します。
  • エントリポイントの矢印をビューコントローラからルートビューコントローラに移動します。
38
Edwin Iskandar

これを行う最も簡単な方法は、ナビゲーション階層のルートにしたいビューコントローラーを選択し、

Editor > Embed In > Navigation Controller

これにより、新しいナビゲーションコントローラが作成され、すべてが接続されます。

41
Aran Mulholland

この手順を確認してください。1. 2つのビューコントローラ間の接続をクリックします。 2.属性インスペクタをクリックします3.識別子を「showDetail」に設定します。 4.保存して実行します。

0
Raj Kumar