13

ここに画像の説明を入力

私のストーリーボード (上に表示) には、注釈付きの MKMapView を保持する ViewController があります。これらの注釈には開示アイコンが保持されており、タップすると、ユーザーは別の ViewController に移動する必要があります。そのために、View Controller 間にプッシュ セグエを作成しました。次に、'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 に変更しようとしましたが、ビューが黒い画面として表示されます。

4

3 に答える 3

40

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

Editor > Embed In > Navigation Controller

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

于 2012-12-30T03:20:32.383 に答える
38

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

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

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

于 2015-03-06T11:37:06.797 に答える