2012-02-25 4 views
0

에 사용자 정의 개체를 전달해야한다. 이 클래스에는 좌표, 제목 및 부제목을 설정하는 init 메서드가 있습니다.MKPinAnnotationView 콜 아웃 버튼 내가 <code>MKAnnotation</code> 프로토콜을 준수 주석 클래스가 세부 사항의 ViewController

나는 이러한 주석의 배열을 만들고 addAnnotations:annotationArray를 사용하여 MKMapView에 정상적인 방법을 추가합니다.

그런 다음 MKMapViewDelegage 메서드 - (MKAnnotationView *)mapView:(MKMapView *)theMapView viewForAnnotation:(id <MKAnnotation>)annotation에서 사용자 정의 핀 색상 인 animatesDrop, canShowCallout을 사용하여 MKPinAnnotationView를 만듭니다. 설명 선에는 UIButtonTypeDetailDisclosure 유형의 UIButton이 있습니다.

나는 응용 프로그램을 실행하고 나는 제목, 자막, 그리고 detailDisclosure 버튼으로 선입니다 예상 결과를 얻을지도의 핀을 클릭

.

내가 알아 내기 위해 노력하고있어 문제는 사용자가 상세 공개 버튼을 클릭 할 때 세부 사항 페이지 ([self.navigationController pushViewController:detailsController animated:YES];)에 데이터를 전달하는 방법이다. init 메서드에 추가 매개 변수를 추가하여 주석 클래스를 수정하려고했지만 - (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control 메서드에서 해당 매개 변수에 액세스 할 수 없습니다. 이 경우 [view.annotation title]과 같은 작업을 수행하여 제목과 부제목에만 액세스 할 수 있습니다. 내가 여기서 할 모르겠어요

, 나는 다시이 작업을 수행하는 방법에 대한 문서 ...

를 찾을 수 없습니다. 자세히보기 컨트롤러에 개체를 전달하고 싶습니다. 객체에는 세부 정보 페이지에 사용될 다양한 데이터가 포함됩니다 ...

PS - 저는 Xcode 4.2 w/ARC를 사용하고 있습니다.

답변

3

calloutAccessoryControlTapped에서 주석 참조는 생성하고 추가 한 정확한 주석 객체이지만 일반적으로 참조는 일반적으로 id<MKAnnotation>으로 입력됩니다.

이 주석 클래스의 사용자 정의 속성에 액세스하려면 먼저 캐스팅 수 있습니다
YourAnnotationClass *myAnn = (YourAnnotationClass *)view.annotation; 

//now you can explicitly reference your custom properties... 
NSLog(@"myAnn.customProp = %@", myAnn.customProp); 

는 "customProp이"당신의 주석 클래스의 속성으로 정의되어 있는지 확인합니다.

+2

예.하지만 먼저 'myAnn'의 클래스 유형을 확인하십시오. 사용자가 "현재 위치"주석을 탭하면이 메시지가 나타납니다. 클래스 중 하나라고 가정 할 경우 예외가 구현되지 않은 예외로 중단됩니다. – Steve

+0

감사합니다 안나,이 아름답게 일했다! 또한 현재 위치 문제를 지적한 Steve에게 감사드립니다. 이 오류를 방지하기 위해 몇 가지 추가 코드를 구현했습니다. if ([myMapAnnotation isKindOfClass : [MyMapAnnotation class]]) – ElasticThoughts

+0

@Steve, 좋은 지적입니다. – Anna