簡體   English   中英

打開時的MapView注釋標注操作

[英]MapView Annotation Callout action when opened

我有一個帶有幾個注釋的mapview。 每個注釋都有一個leftCalloutAccessoryView,它是一個UIViewController類。 這樣做的原因是我希望每個注釋都從服務器加載一些數據,並將該數據的結果添加到注釋subTitle。 所有這些都可以正常工作,除了我不想在啟動我的應用程序時加載所有數據,而是希望僅在打開標注氣泡時才能進行遠程調用。

有人知道我該怎么做嗎? viewWillload,viewDidLoad等。 在這種情況下不起作用。 還有什么例子嗎?

我解決了添加觀察者的問題。 然后,觀察者執行其操作,此后出現標注。

我遇到的問題是顯示氣泡后,我無法更新標注氣泡中的信息。 做到這一點的唯一方法是創建自己的標注氣泡(據我所知),考慮到我有截止日期,這是我不喜歡的。 我通過添加一個額外的UIView(帶有alpha)和文本“獲取位置數據...”來解決此問題。 我只是在按下某個位置時顯示該視圖,觀察者完成后,我再次隱藏了該視圖(當然,通過使用動畫)。

希望我的回答對別人有幫助。

碼:

[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 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM