質問

私はいくつかの注釈付きのMapViewを持っています。すべての注釈はのUIViewControllerクラスですleftCalloutAccessoryViewを持っています。この理由は、私はすべての注釈は、サーバーからいくつかのデータをロードし、注釈字幕にそのデータの結果を追加したいということです。 これは、すべて私が私のアプリを起動したときすべてのデータをロードする必要はありませんが、私はコールアウトバブルが開かれたときにのみ行われるリモート呼び出したいことを除いて、完璧に動作します。

んの誰もが、私はこれを行うことができます方法を知っていますか? viewWillload、のviewDidLoad電気ショック療法。この場合には動作しません。任意の例だけでなく、?

役に立ちましたか?

解決

私はオブザーバーを追加し、問題を解決しました。観察者はその事を行い、後にそのコールアウトショーアップします。

私はとの問題を抱えていた何かが、バブルが示された後、私はコールアウトバブルの情報を更新できませんでしたということです。これを行うための唯一の方法は、私は期限を持っていることを考えるように感じていなかった何かである、(私はそれを理解するよう)あなた自身の吹き出しバブルを作成することです。 私は「...位置データを取得する」ことでアルファとテキストで余分のUIViewを追加することで固定しました。場所を押して観察が行われたときに、私は(アニメーションを使用してコースオフ)再びビューを隠したときに、私はちょうどそのビューを示します。

希望私の答えは、他の人を助けます。

コード:

[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";
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top