2012-04-15 2 views
0

내 핵심 데이터 모델과 상호 작용하는 내 응용 프로그램 용 UITableViewController를 만들었습니다. 그것은 주된 목적은 탐색 컨트롤러에 밀어 넣어 엔티티의 목록을 표시하고 편집/선택하고 정보 등을 드릴 다운 수 있도록하는 것입니다 ...프로토콜에 UIViewController 사용

그러나 내 응용 프로그램의 다른 곳에서, 나는 이제 모달리 싶습니다 이러한 엔터티 중 하나를 선택하는 간단한 선택기를 표시하십시오. 이 구현하는 가장 좋은 방법은 사용자가 엔터티 등을 취소했는지 또는 선택했는지에 대해 내 대리자에게 메시지를 다시 보낼 수있는 선택 도구를 처리하는 프로토콜을 구축하는 것입니다.

너무 많은 코딩이 같은, 제 질문은 이것입니다 : 그것은 가능한/또는 프로토콜로 UITableViewController를 활성화하는 것이 좋습니다?

정상적으로 표시 될 때 현재 (UIViewController의 표준 하위 클래스처럼) 동작하지만 대리자가 모달로 표시 할 수 있으며 대리인에게 메시지를 전달할 수 있습니까?

모범 사례에 대한 그녀의 생각을 잘 알고 있습니까?

답변

1

공식 프로토콜조차 필요하지 않습니다. 다른 컨트롤러에서 인스턴스화 할 때 UITableViewController를 @property (nonatomic, assign) id delegate으로 지정하면됩니다. 대리인으로 설정하십시오. id을 사용하면 클래스를 너무 단단히 연결하지 않고 대리인을 보유하지 않습니다.

호출 컨트롤러에서 didCancelPicking...:(id)senderdidPick...:(id)sender item:(id)pickedItem에 대한 두 가지 방법을 구현하십시오.

이제 UITableViewController를 모달로 볼 때 두 가지 작업을 수행해야합니다. 취소 버튼을 제공하고 + (didCancelPicking...)에 반응하고 tableView:didSelectRowAtIndexPath:을 수정하여 didPick...을 대리인에게 보냅니다. 대표자를 항상 respondsToSelector:으로 테스트하고, 경우에 따라 performSelector:withObject:으로 테스트합니다. 이러한 대리자 메서드에서는 항상 보낸 사람을 첫 번째 인수로 사용합니다.

또한 항상 모달 컨트롤러를 호출 클래스에서 표시하거나 숨 깁니다. 예를 들어 UINavigationController에서 자신을 제거하지 마십시오.

이것은 내 모자 꼭대기에서 생각할 수있는 모범 사례입니다.

여기에서 특정 코드 재사용에 대해 : 코드가 너무 복잡해 지거나, 해당 UITableViewController를 재사용하고 모달로 표시 될 때 동작 방식을 변경하고자 할 때 결정해야합니다. 예 : 나중에 편집 및 드릴 다운을 방지 할 수 있습니다. 물론 항상 if (self.delegate) 수표에 캡슐화 할 수 있지만 ...