2011-03-11 3 views
1

mapview에서 주석 객체에 추가 할 버튼이 있다고 가정합니다.iOS가 콜백을 첨부하고 가능한 다른 발신자를 연관시킬 수 있습니까?

 AnnotationButton* rightButton = [AnnotationButton buttonWithType:UIButtonTypeDetailDisclosure]; 
      [rightButton addTarget:self 
          action:@selector(showDetails:) 
        forControlEvents:UIControlEventTouchUpInside]; 

클릭하면 showDetails 함수가 호출됩니다.

세부 정보 표시는 - (void)showDetails:(id)sender;로 정의되며 보낸 사람이 필요합니다. 더 많은 변수를 보내거나 다른 발신자를 연결하는 방법이 있습니까? 그 이유는 단추를 클릭하면 해당 단추와 관련된 주석이 무엇인지 알 수 있기 때문입니다. 단추가 작성된 컨텍스트에서 사용할 수있는 다른 오브젝트로 주석을 고려하십시오.

UIButton 클래스를 서브 클래 싱하고 그 안에 추가 정보를 저장하려고 생각했지만 해킹처럼 보입니다.

어떤 아이디어?

답변

3

는지도의 대표는 메시지 mapView:annotationView:calloutAccessoryControlTapped:를 받아야합니다. 이렇게하면 도청 된 MKAnnotationView 인스턴스가 전달되어 annotation 속성이있어 해당 주석을 제공합니다. 단추에 직접 조치를 사용하는 대신이를 사용해야합니다.

+0

이것은 대단한 해결책이었습니다. – pyramation

2

아니요, 작업 메시지로 전송되는 내용을 변경할 수 없습니다. 두 가지 인수를 요청할 수 있지만 버튼과 이벤트를 트리거 한 이벤트가됩니다. 원하는 것을 얻으려면 두 가지 옵션이 있습니다 (지금 생각할 수있는 옵션).

  1. 버튼의 tag 속성을 사용하십시오. 배열의 주석 색인과 같은 주석을 식별하는 고유 한 태그를 각 버튼에 제공 할 수 있습니다. 그런 다음 showDetails: 메소드에서 특수 효과를 쉽게 얻을 수 있습니다.
  2. 하위 클래스 UIButton. 내장 객체에 기능을 추가하는 데는 아무런 문제가 없습니다. 추가 할 필요가있는 것은 객체를 보유하는 속성입니다. 보너스 : 속성에 일반 id 유형을 사용하고 representedObject과 같이 일반 이름을 지정하면 다른 프로젝트에서도 사용할 수 있습니다.
  3. from Anomie objc_setAssociatedObject를 사용하면 서브 클래 싱없이 버튼에 값을 추가 할 수 있습니다. UIButton에 카테고리를 추가하여 사용하기 쉽게 만들 수 있습니다. 이 버튼은 MKAnnotationView의 rightCalloutAccessoryView 또는 leftCalloutAccessoryView에 사용되는 경우 버튼을 탭하면
+1

3. [objc_setAssociatedObject] (http://stackoverflow.com/questions/5279884/how-to-add-userinfo-to-a-uialertview/5280117#5280117)를 사용하십시오 (단, UIButton을 서브 클래 싱하는 경우 해킹, 하나는 아마도 더 많은 해킹을 고려할 것입니다.) – Anomie

+0

@Anomie 감사합니다. 추가하겠습니다. iOS 4 이상이 필요하다는 것을 기억하십시오. – ughoavgfhw

+0

정말입니까? 나는 3.1 일 안에 그것을 사용하는 것을 기억하는 것 같다. – Anomie

관련 문제