0

いくつかの注釈付きのマップビューがあります。すべてのアノテーションには、UIViewControllerクラスであるleftCalloutAccessoryViewがあります。これは、すべての注釈でサーバーからデータをロードし、そのデータの結果を注釈サブタイトルに追加するためです。これはすべて完全に機能しますが、アプリの起動時にすべてのデータをロードしたくないのですが、コールアウトバブルが開いたときにのみリモート呼び出しを実行したいのです。

誰かが私がこれを行う方法を知っていますか?viewWillload、viewDidLoadなど。この場合は機能しません。例もありますか?

4

1 に答える 1

2

オブザーバーを追加して問題を解決しました。次に、オブザーバーがその処理を実行し、その後、コールアウトが表示されます。

問題があったのは、バブルが表示された後、コールアウトバブルの情報を更新できなかったことです。これを行う唯一の方法は、(私が理解しているように)独自のコールアウトバブルを作成することです。これは、期限があることを考えると、私が感じなかったものです。アルファ付きのUIViewと「Gettinglocationdata...」というテキストを追加することで修正しました。場所を押すときにそのビューを表示し、オブザーバーが終了したら、ビューを再び非表示にします(もちろんアニメーションを使用して)。

私の答えが他の人に役立つことを願っています。

コード:

[pin addObserver:self
      forKeyPath:@"selected"
         options:NSKeyValueObservingOptionNew
         context:GMAP_ANNOTATION_SELECTED];

さらにいくつかのコード:

- (void)observeValueForKeyPath:(NSString *)keyPath
                      ofObject:(id)object
                        change:(NSDictionary *)change
                       context:(void *)context{

    NSString *action = (NSString*)context;

    MKAnnotationView *annotationView = [(MKAnnotationView*)object retain];
    BikeAnnotation *bike = [[annotationView annotation] retain];

    if([action isEqualToString:GMAP_ANNOTATION_SELECTED] && [[bike _stationType] intValue] != 5 && [[bike _stationType] intValue] != 6){
        BOOL annotationAppeared = [[change valueForKey:@"new"] boolValue];
        if (annotationAppeared) {
            NSLog(@"Annotation selected");
        else {
            NSLog(@"annotation deselected");
        }
    }
}

そして、これを@synthesizeの直後に置きます。

NSString * const GMAP_ANNOTATION_SELECTED = @"gmapselected";
于 2010-04-19T18:54:25.903 に答える