2012-02-21 31 views
5

tôi có phương pháp sau đây trong MapViewController tôi:iOS - Đặt chi tiết Tiết lộ Nút trên MKAnnotationView

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation { 
    MKAnnotationView *annotationView = [mapView dequeueReusableAnnotationViewWithIdentifier:@"MapVC"]; 
    if (!annotationView) { 
     annotationView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"MapVC"]; 
     annotationView.canShowCallout = YES; 
     annotationView.leftCalloutAccessoryView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 30, 30)]; 
     annotationView.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure]; 
     // could put a rightCalloutAccessoryView here 
    } else { 
     annotationView.annotation = annotation; 
     [(UIImageView *)annotationView.leftCalloutAccessoryView setImage:nil]; 
    } 

    return annotationView; 
} 

Tôi tin rằng nó được thiết lập đúng, nhưng khi bản đồ của tôi cho thấy các chú thích của tôi với tiêu đề và phụ đề đúng, nhưng họ sẽ không bao không hiển thị nút tiết lộ chi tiết, tôi có thiếu cái gì không?

Một điều nữa là khi gỡ lỗi phương thức này không bao giờ được gọi, nhưng chế độ xem chú thích hiển thị với tiêu đề và tiêu đề phụ.

Trả lời

8

Rất có thể chế độ xem bản đồ của delegate không được đặt.

Nếu delegate không được đặt hoặc nếu bạn không triển khai phương pháp viewForAnnotation, chế độ xem bản đồ sẽ tạo chế độ xem chú thích mặc định là ghim màu đỏ có chú thích chỉ chứa tiêu đề và tiêu đề phụ (trừ tiêu đề trống trong trường hợp đó bạn sẽ nhận được một pin nhưng không có chú thích).

Hoặc kết nối giao diện bản đồ của delegate ổ cắm để của chủ sở hữu hoặc trong mã Add file này (ví dụ trong viewDidLoad trước khi chú thích được thêm vào.):

mapView.delegate = self; 

Ngoài ra, nếu bạn không sử dụng ARC, thêm autorelease đến các dòng alloc để tránh rò rỉ bộ nhớ.

Các vấn đề liên quan