2011-02-25 5 views
2

저는 Objective-C와 Cocoa에 비교적 익숙합니다 ... 저는 오랫동안 Cocoa/Cocoa Touch에서 MVC 패턴을 올바르게 구현하는 방법을 알고있었습니다. 나는 그것의 배후에있는 생각을 이해한다. 개념은 개념적으로 완벽합니다. 모델은 데이터를 보유하고, 뷰는 사용자가보고 상호 작용할 수있는 것이며, 컨트롤러는 둘 사이의 다리 역할을합니다. 보기는 모델과 대화 할 수 없으며 모델은보기와 대화 할 수 없습니다. 알았다.컨트롤러와 대화하기 위해 uiview를 얻는 방법

내가보기에 MVC를 효율적으로 사용하는 방법은 무엇입니까 ... 사용자가보기와 만 상호 작용할 수 있고 상호 작용할 수있는 경우 (즉, iPhone 앱의 경우 사용자가 UIView의 하위 클래스, "touchesBegan"및 "touchesMoved"메소드 실행 등), 뷰는 이러한 이벤트를 컨트롤러에 어떻게 전달합니까?

나는 수많은 예제와 포럼을 온라인에서 살펴 봤지만이 목적을 달성하기위한 단순화 된 다목적 방법을 아직 찾지 못했다 ... 연결할 수있는 단추, 슬라이더 및 다른 것들을 통해 컨트롤러와 통신하는 방법을 알고있다. 콘센트에 연결해야하지만 대상 동작 메커니즘이없는 경우에는 가장 좋은 방법은 무엇입니까?

무엇을해야할지 또는 어디에서 볼 것인지 제안 해 주셔서 미리 감사드립니다.

답변

1
  1. 이렇게하기위한 코코아의 표준 방식은 위임 패턴 (참조 : UITableViewDelegate)입니다. 당신의 뷰 클래스는 델리게이트 프로토콜을 선언 할 것이고 컨트롤러는 자신을 뷰의 델리게이트로 설정한다. 그런 다음 뷰는 컨트롤러에 무언가를 전달하려고 할 때마다 정의한 위임 메서드 중 하나를 호출합니다.

  2. 다른 방법으로 직접보기에서 대상 동작 메커니즘을 구현하는 것입니다. UIControl (그냥 sendActionsForControlEvents:이라고 부름)에서 하위 클래스로 만들면 더 많거나 적은 것을 무료로 얻을 수 있지만 모든 사용자 정의 클래스에 대해 동일한 방식으로 작동하는 시스템을 구현하는 것은 매우 쉽습니다.

  3. (편집 : 제 3의 방법은 컨트롤러에 KVO가 포함 된보기의 속성을 준수하는 것입니다.)이 방법은 터치 이벤트를 전달하는 데는 적합하지 않지만, 알림을 보내려는 경우 가능한 방법입니다. 컨트롤러가 상태 변경 또는 이와 유사한 것에 대해).

+0

대단히 분명한 답변을 주셔서 감사합니다. 나는 대의원 패턴을 사용하는 것이 일반적인 관행이라는 것을 몰랐다. 애플의 샘플 코드 일부에서이 접근법을 보았지만, 내가 시도한 것 이외의 다른 이유로 그것을 사용하고 있다고 가정했다. 다시 한번 감사드립니다. – ChrisB

관련 문제