替换mkannotationview中的calloutaccessoryview

时间:2010-04-05 08:00:41

标签: iphone iphone-sdk-3.0 mkmapview

在我的viewForAnnotation代表中,我创建了一个MKAnnotationViewleftCalloutaccessory作为信息按钮。点击信息按钮后,我想用UIActivityIndicator替换它。所以在calloutAccessoryTapped代表中,我写道 view.leftCalloutaccessoryView = [UIActivityIndicator indicatorWithStyle:UIActivityIndicatorWhite];

标注附件似乎有所改变,但似乎视图没有立即更新。

当标注配件被隐藏(通过敲击另一个针脚)并重新打开时,我看到一个微调器。但除此之外,我没有。

我尝试过调用[view setNeedsdisplay][view setNeedsLayout]以及[view layoutsubviews]但是徒劳无功。

有任何建议/指示吗?

2 个答案:

答案 0 :(得分:0)

我会考虑删除并重新添加注释。这看起来有点沉重,但可能有用。

答案 1 :(得分:0)

我遇到了类似的问题 - 如果有一个与注释关联的图片,我需要为leftCalloutAccessoryView显示图像。尝试在mapView:didSelectAnnotationView中设置它,而不是在mapView:viewForAnnotation

中设置它
-(void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)annotView
{
    ...

    if(imgURL.length>1){            
        // set a thread that will load the image 
        // but don't set the leftCalloutAccessoryView until the image is loaded 
        dispatch_queue_t downloader = dispatch_queue_create("annotation image downloader",NULL);
        dispatch_async(downloader, ^{
            NSURL* photoURL = [NSURL URLWithString:imgURL];
            NSData* photoData = [NSData dataWithContentsOfURL:photoURL];
            UIImage* photoImage = [UIImage imageWithData:photoData];
            dispatch_async(dispatch_get_main_queue(), ^{
                annotView.leftCalloutAccessoryView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 32, 32)];
                [(UIImageView *) annotView.leftCalloutAccessoryView setImage:photoImage];
            });                
        });
    }
}