0

さまざまな建物オブジェクト (自分のクラス) を含むマップビューを持つアプリがあります。各建物にはすべてうまく機能する注釈プロパティがあり、ユーザーは目的の建物のテーブルを検索し、ボタンをタップすると、関連する注釈が表示されます。

これで、DetailViewController にセグエをプッシュするメソッド (showDetails) を呼び出すアノテーションに吹き出しボタンがありますが、問題は、この DetailViewController に適切なビルドを取得することです。すべての建物はデータ コントローラーの配列に格納されており、可能であればそこから 1 つを読み込みたいと考えています。

これまでのところ、controlWasTapped メソッドを使用してきました。

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

for (Building* theBuilding in self.datacontroller.masterArray){
if(theBuilding.name isEqualToString:view.annotation.title){
    NSLog(@"theBuilding's name %@", theBuilding.name);
}
}

これは正常に機能し、正しい建物を返しますが、これを DetailViewController に取得する方法について困惑しています。PrepareForSegue メソッドがありますが、正しい建物を取得するにはどうすればよいですか? また、DidSelectAnnotation を取得したので、showDetails メソッドが必要ですか?

建物タイプの引数を取るように showDetails メソッドを変更してから、prepareForSegue で建物の詳細を提供できると考えていましたが、もっと良い方法があれば知りたいです。

では、最適なプランは何ですか?どうもありがとう

4

1 に答える 1

0

投稿したコードを含むクラスでインスタンス変数を宣言します。

Building *buildingOfInterest;

それから

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

    for (Building* theBuilding in self.datacontroller.masterArray)
        if(theBuilding.name isEqualToString:view.annotation.title) {
              buildingOfInterest = theBuilding;
              [self performSegueWithIdentifier:@"ShowBuildingSegue" sender:self];
              break;
    }
}

それから:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
     if ([[segue identifier] isEqualToString:@"ShowBuildingSegue"])
         ((MyBuildingVC *)segue.destinationViewController).building = buildingOfInterest;
}

そして、ターゲットView Controllerのヘッダーファイルで:

@interface MyBuildingVC : UIViewController
@property (strong) Building * building;
@end
于 2012-12-07T13:26:04.640 に答える