2011-12-05 3 views
3

Stanford iTunesU CS193p 온라인 코스를 본 후 MVC 디자인을 구현하는 올바른 방법에 관해 빠른 질문이 있습니다.MVC를 사용할 때 별도의 뷰 클래스를 만들어야합니까?

보통 응용 프로그램을 할 때 컨트롤러의 일부로 내보기를 설정하고 UIButtons, UILabels 등을 추가합니다. 본질적으로 컨트롤러와 뷰는 UIObject를 뷰 객체로 간주하지 않는 한 하나가됩니다.

초기 CS193p 예제 중 하나에서, 튜터는 구현하기 전에 뷰어를 별도의 객체 (UIView의 서브 클래 싱)로 분리합니다. 컨트롤러 객체가 준수하는 뷰의 프로토콜 및 위임 속성

저는 CS193p 디자인의 실용성에 대해 궁금 해서요.보기를 분리하면 MVC 디자인 패러다임을 (특히 교육 보조 수단으로) 더 잘 나타내지 만 실제 응용 프로그램에서는 그 응용 프로그램에 약간 회의적이라는 것을 이해할 수 있습니다.

답변

4

"보기"를 UIButton 및 UIImageView와 같은 개체로 생각하십시오. 재사용 할 수있는 구성 요소로 나머지 응용 프로그램에 대해서는 알 필요가 없습니다. 뷰 컨트롤러는 뷰 객체를 구성하고 상태를 관리하는 객체입니다.

주로 사용자 정의 도면을 drawRect:에해야하는 경우 UIView를 하위 클래스로 만들려는 경우가 있습니다. UIView를 하위 클래스로 분류하지 않아도 동작을 사용자 정의 할 수 있습니다. 즉,보기 컨트롤러가있는 것입니다. 예를 들어, UITableView를 하위 클래스로 만들지 않고 테이블 뷰를 자체 대리자로 만들 것입니다. 대신 뷰 컨트롤러를 테이블 뷰의 대리자로 만들 수 있습니다.

+0

답변을 주셔서 대단히 감사드립니다. 예를 들어 제가 실제로 언급 한 예는 - (void) drawRect : (CGRect) rect이므로 UIView 하위 클래스와 함께 사용하는 이유입니다. 다시 한 번 고마워, 나는 눈치 채지 못했다. – fuzzygoat

1

꼭 필요한 것은 아닙니다. Interface Builder를 사용하는 경우 사용자 정의보기를 작성해야하는 이유 (비즈니스 코드에서 UI 설치 코드를 분리)에주의해야합니다. 그러나 뷰에 대한 사용자 지정 동작을 작성하거나 IB로는 얻을 수없는 일부 속성을 설정하려면보기를 별도의 클래스로 분리하는 것이 좋습니다.

+0

감사합니다. – fuzzygoat

2

iOS의 경우 UIView 클래스는 뷰 컨트롤러 클래스가 아닌 그리기 새로 고침 및 터치 핸들러를 구현합니다. drawRect : 또는 touchesBegan : 등이 필요한 경우 별도의 UIView 하위 클래스가 필요합니다.

이 부분적으로는 단추 및 레이블 자체의 동작 방식이기 때문에 부분적으로 나타날 수 있습니다. 다시 그리며 처리 된 위임을 위임합니다. 뷰 컨트롤러는 내용을 그리지 않고 xy 위치를 추적합니다.

+0

- (void) drawRect : (CGRect) rect와 관련하여 UIView 하위 클래스의 필요성을 설명해 주셔서 감사합니다. 이제 참조 된 예제에서 어떤 일이 발생했는지 알았습니다. – fuzzygoat

관련 문제