본문 바로가기
프로그래밍/iOS

MKMapview의 주석(Annotation)을 통해 상세뷰로 넘어 갈때, 인덱스 값 찾기.

by 백룡화검 2012. 2. 6.


거두절미 하고 본론으로 들어 가죠!^^


위와 같이 지도에 여러개의 주석(Annotation)이 있다고 가정해봅시다.


해당 주석을 선택한 뒤 상세보기버튼을 통해서 상세보기(디테일뷰)뷰로


넘어 가야하는 일이 종종 있습니다.


이때!! 해당 주석이 몇번째 주석인지 알아야 해당하는 순서의


상세보기 뷰를 제대로 전달 할 수 있습니다.


이틀동안 이런저런 방법을 통해본 결과.. 


단 3줄로 해결하는 방법이 있었습니다.


아래의 방법을 보시겠습니다.!






< 그림 1 >


위의 그림1의 빨간색 사각 박스영역을 보세요!


self.indexPin 은 어노테이션 오브젝트들이 저장되어 있는 NSMutableArray 입니다.


여기에 indexOfObject를 통해 지금 생성되고 있는 주석이 배열에서 몇번째 오브젝트인지 구합니다.


이것을 NSInteger 변수에 값을 넣어 줍니다.


그 후, 버튼에 addButton.tag 메소드를 통해서 버튼 태그 값에 저장 합니다.


이렇게 되면 주석이 생성될 때 마다 거기에 딸려 나가는 CalloutAccessory 버튼에 태그가 매겨지게 됩니다.


자! 이제 이 태그를 써먹을 차례 입니다.









< 그림 2 >


위의 -(void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view callout............ .......... .... ... .. .

메소드는 해당 주석(Annotation)을 선택했을떄 나타나는 악세서리를 관리 하는 메소드 입니다.


우리가 버튼에 설정한 태그값은 control이라는 인자를 통해, 불러올 수 있습니다.


마찬가지로 NSUinteger 변수에 저장하셔서 상세보기 버튼으로 이동할때 저 값을 활용 하시면 됩니다.



혹시 위와 같은 메소드를 사용하지 않으시고 아래와 같이 별도의 셀렉터를 사용하시는 분들이 계실텐데요 ~~

[detailButton addTarget:self action:@selector(showDetailView:) forControlEvents:UIControlEventTouchUpInside];

< 그림 3 >




이럴때는 

-(IBAction)showDetailView:(UIView*)sender {

위와 같은 메소드에서 버튼 설정을 하실 텐데요.


그때는 sender.tag 하시면 해당 버튼의 인덱스 값이 넘어 옵니다.





주석(어노테이션)에서 인덱스를 넘겨주는 것을 찾아 보면 자료는 몇몇 있지만 저같은 초보자를 위해서


상세하게 설명해놓은 글이 없는것 같아서 몇자 적어 끄적여 보았습니다.^^


도움이 되셨나요?