0

こんにちは、注釈がポップアップする mapView があります。注釈の吹き出しボタンがクリックされたときにセグエできるようにしたいと考えています。私がそれをするとき、私はいくつかの問題を抱えています。いくつか質問があります 1) mapViewController をナビゲーション コントローラーに埋め込む必要がありますか? はいの場合、注釈が表示されないのはなぜですか? 2) prepareforsegue は performSegueWithIdentifier から呼び出されますか? 3) 自分自身を送信する場合、この場合、自分自身は何になりますか? ありがとう

 - (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control
    {
[self performSegueWithIdentifier:@"Present Photo" sender:self];
    }

ここで発生する問題に気付きました。以前は ID の詳細からマップ コントローラーを取得していましたが、今ではナビゲーション コントローラーだと思います。マップ コントローラーへの参照を取得するにはどうすればよいですか?

-(void) updateSplitViewDetail{
// ERROR OCCURS HERE!!! No longer map controller since I embed in navigation controller
id detail = [self.splitViewController.viewControllers lastObject];
if ([detail isKindOfClass:[MapViewController class]]) {
MapViewController *mapVC = (MapViewController*) detail;
mapVC.delegate = self;
mapVC.annotations = [self mapAnnotations];
}

}


- (void)viewDidLoad
{
[super viewDidLoad];
[self updateSplitViewDetail]; //Error may be here
}
4

1 に答える 1

0

1)

はい。プッシュ セグエを実行する場合は、ソース ビュー コントローラー (マップ ビュー コントローラー) をナビゲーション コントローラーに埋め込む必要があります。

その場合に注釈/コールアウトが表示されない理由はわかりません-そのように正しく機能するプロジェクトをたくさん見てきました。おそらく、注釈を追加するときのマップ ビューへの参照は、あなたが思っているものではありませんか? (そして、代わりに注釈を追加しますnilか?) 私たちが支援できるように、詳細を提供する必要があります。(別の問題なので、質問を編集するか、新しい質問を投稿してください。)

2)

はい。prepareForSegue:sender:を呼び出した後に呼び出されますperformSegueWithIdentifier:sender:

3)

これらのメソッドの "sender" 引数は、完全に自分で使用するためのものです。この引数が存在する唯一の理由は、 を呼び出すコードから何らかのコンテキストperformSegueWithIdentifier:sender:を の実装に渡すことができるようにするためですprepareForSegue:sender:。(または、ユーザーが何らかのコントロールをタップしたときに自動的に実行されるセグエの場合、prepareForSegue:sender:どのコントロールがタップされたかを実装が認識できるようにします。)

だから、あなたが望むものは何でも渡してください:selfそれは問題ありnilません。または、prepareForSegue:senderどのコールアウトがタップされたかを実装で知ることが役立つ場合は、注釈ビューの注釈を「送信者」として渡すことを検討してください (たとえば、適切な情報で宛先ビュー コントローラーを設定できるようにします)。

于 2012-08-13T06:20:49.797 に答える