2012-02-03 3 views
2

현재 사용자 위치 설명 선에 오른쪽 액세서리 버튼을 추가하고 싶습니다. 주제에 대한 몇 가지 질문을 찾았지만 저에게 도움이되지 않습니다. 나는이 솔루션은 사용자의 위치에 대한 사용자 지정 MKAnnotationView을 만드는 것입니다 몇 군데에서 읽은현재 액세서리 콜 아웃에 올바른 액세서리 버튼을 추가하려면 어떻게해야하나요?

- (MKAnnotationView *)mapView:(MKMapView *)_mapView viewForAnnotation:(id<MKAnnotation>)annotation 
{ 
     //TODO: this doesn't seem to be working? 
    if ([annotation isKindOfClass:[MKUserLocation class]]) { 
     MKAnnotationView * aV = [mapView viewForAnnotation:annotation]; 
     aV.canShowCallout = YES; 
     aV.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure]; 
     return nil; 
    } 
    return nil; 
} 

: 여기에 지금까지 내가 성공적으로 내 다른 주석에 적합한 액세서리 버튼을 넣어 가지고 한 코드는 그러나 이것이 사용자 위치에 대해 어떻게 수행되는지에 대한 시연을 보지 못했습니다 - 내 맵에서 다른 주석에 대해이 작업을 성공적으로 수행했습니다.

샘플 코드가 가장 도움이 될 것입니다. 감사합니다.

답변

9

사용자 위치 주석보기에 대한 참조를 다시 받아야합니다. 다음 방법> = 5

옵션 1

- (void)mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray *)views { 
    MKAnnotationView *aV; 
    for (aV in views) { 
      if ([aV.annotation isKindOfClass:[MKUserLocation class]]) { 
       MKAnnotationView* annotationView = aV; 
       annotationView.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure]; 
      } 
    } 
} 

뿐만 아니라 아래의 대리자 메서드를 참조

다른 방법

- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation 
{ 
    MKAnnotationView* annotationView = [mapView viewForAnnotation:userLocation]; 
    annotationView.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure]; 
} 

가 있는지 확인 아이폰 OS에서 호출되는 델리게이트 메소드를 추가하면 언제든지 할 수 있습니다. 콜 아웃 버튼을 탭한다 : 하나 이러한 방법의 아이폰 OS에서

-(void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control 

가 호출되는 당신은 그것을 왼쪽/오른쪽 accessorybutton를 추가 할 수 있습니다. 사용자 위치 주석보기의 하위보기 수를 확인하여이 버튼을 두 번 추가하지 않았는지 확인하십시오.

또한 추가/런타임에 accessoryviews 제거,하지만 난 당신이

+0

덕분에 @chatur가 작동했습니다. Btw, iOS 4.x 및 iOS 5 버전을 어떻게 지원 하시겠습니까? –

1

주된 문제는 두 경우 모두 nil을 반환한다는 것입니다. 재사용 식별자도 사용해야합니다.

- (MKAnnotationView *)mapView:(MKMapView *)_mapView viewForAnnotation:(id<MKAnnotation>)annotation 
{ 

if ([annotation isKindOfClass:[MKUserLocation class]]) { 
    MKAnnotationView * aV = [mapView dequeueReusableAnnotationViewWithIdentifier:@"locationView"]; 
    if (aV == nil) 
     aV = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"locationView"]; 
    aV.canShowCallout = YES; 
    aV.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure]; 
    return aV; 
    } 
return nil; 
} 

또한 구현해야합니다 :

- (void)mapView:(MKMapView *)_mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control 

를 콜 아웃 액세서리의 행동.

+0

이 매우 유망한 보이는 it.buttons을 제거하지 않습니다 믿을 수, 나는 그것을 시도하고 그에 따라 투표 할 수 있습니다! –

+0

이 기능을 사용하셨습니까? 내 애플 리케이션 중 하나에서 꽤 많은 코드를 가지고 있으며 아무런 문제가 없었다. – brendan

+0

두려워하지 마라! 지금지도에 사용자 위치 표시가 보이지 않습니다. 만약 nil을 반환하기 위해 다시 변경하면 이전처럼 작동하지만 물론 액세서리 버튼은 표시되지 않습니다. 제안? –