2010-06-13 2 views
3

저는 iPhone 개발에 뛰어 들고 있습니다. 핵심 개념 중 하나는 바로 내 머리를보기 위해 뷰 컨트롤러입니다. 당신이 사과 dev에 사이트에 GLPaint의 예를 보면, 당신은이 프로젝트를 ... 볼 수 언제보기 컨트롤러를 사용해야합니까?

  1. 앱 위임 클래스
  2. uiwindow 서브 클래스
  3. 그리고 UIView 하위

그리고 uiview 하위 클래스는 모든 핵심 그래픽 페인팅 논리를 구현하고 터치 이벤트를 처리합니다. 내 질문은 ...

  1. 왜 해당보기 논리를 처리하기 위해 구현 된보기 컨트롤러가 없습니까?
  2. 뷰 컨트롤러를 사용하여 해당 논리를 구현할 수 있습니까? 아니면 uiview 하위 클래스에서 구현해야합니까?
  3. 마지막으로 뷰 컨트롤러를 사용하여 뷰 로직 코드를 구현해야합니까?

도움을 위해 미리 감사드립니다.

답변

2

보기는 사용자와 상호 작용하는 방법을 알고 있습니다. 일부 데이터를 표시하는 방법, 이벤트를 처리하는 방법 및 사용자에게 피드백을 제공하는 방법을 알고 있습니다.

보기 컨트롤러는 현재 어떻게되는지 알고 있습니다. 표시 할 데이터와 사용자 작업에 대한 대응 방법을 알고 있습니다.

UIButton은 제목과 이미지를 표시하는 방법과 클릭을 추적하는 방법을 알고 있지만 제목이 무엇인지 또는 클릭 한 후에 수행 할 작업을 알지 못합니다.

UITableView는 셀에 데이터를 표시하는 방법과 편집을 처리하는 방법을 알고 있지만 셀을 삭제할 때 표시 할 데이터 나 수행 할 작업을 알지 못합니다. 이를 위해 종종 뷰 컨트롤러가 될 대리자 및 데이터 소스를 사용합니다.

이 부분은 디자인과 유지 관리가 무엇을 어떻게 단순화하는지에 대한 구분입니다. 모든 유형의 테이블 논리에 대해 tableview의 하위 클래스를 만들 수 있지만 다른보기도 제어 할 수 없습니다. 뷰 컨트롤러는 여러 뷰를 제어하고 뷰를 조정할 수 있습니다.

편집 :

그래서 당신이보기 컨트롤러 어떤 시간을 사용해야을 수행해야합니다

  • 여러보기 사이를 좌표입니다.
  • 모델 데이터와 뷰 간의 좌표입니다.
  • 사용자보기에 대한 응답으로 응답합니다.
  • 보기를 언로드하고 다시로드하십시오.

뷰 컨트롤러는 엄격히 UIViewController가 아닙니다. UIViewController가 소유하고 일부 뷰를 처리하지만 NSObject 또는 기타에서 파생 된 뷰 컨트롤러가있을 수 있습니다. 뷰 컨트롤러는 UIViewController를 기반으로하는 뷰 계층의 일부를 관리하며 해당 UIViewController가 소유합니다. UIViewController는 응용 프로그램 위임을 기반으로하는 계층 구조의 일부일 수 있으며 탐색, 탭 또는 기타 메타 컨트롤러가 소유 할 수 있습니다.

그래서 응용 프로그램 대리인은 UINavigationController와 같은 0 개 이상의 메타 컨트롤러를 소유합니다. 각 메타 컨트롤러는 하나 이상의 UIViewController를 소유합니다. 각각은 뷰 계층 구조를 소유하며 뷰 계층의 일부를 관리하는 데 도움이되는 여러 개의 간단한 뷰 컨트롤러를 소유 할 수 있습니다. 메타 컨트롤러가 필요하지 않으면 응용 프로그램 대리인이 소유하거나 UIViewController가 될 수 있습니다.

+1

나는 BeachRunnerJoe가 MVC 디자인의 기본 사항을 이해했다고 가정하지만 실제로 초기 iPhone 예제의 일부에는 전용 루트보기 컨트롤러가없는 대신 초기 AppDelegate 클래스를 사용하는 이유가 궁금합니다. Xcode 템플릿은 Window 기반 및 View 기반 응용 프로그램 모두에 존재하므로 크게 나타납니다. 때로는 초기 앱 예제가 기본이므로 NIB 파일을 만들지 않고 직접 프로그래밍 방식으로보기를 생성 할 수도 있습니다. 최근에 iPhone 개발을 배우면서 나는 알아 차리고 스스로에게 물었습니다. –

+0

일반적으로 응용 프로그램 대리자는 뷰 컨트롤러 계층의 소유자로 사용됩니다. 예를 들어 저장된 상태를 복원하는 경우와 같이 어느 뷰 컨트롤러가 먼저로드되는지를 인식하고 전역 범위 모델 개체를 관리 할 수 ​​있습니다. 애플의 예에 관해서는, 나는 그들이 단순한 프로젝트에서 디자인에 대한 고려에 집중하고 있다고 생각한다. 단순한 예에서도 무게를 감안할 때, 애플은 언제나 좋은 디자인 패턴을 사용해야하지만, 설교하는 것을 연습하는 데 어려움을 겪습니다. – drawnonward

0

View 컨트롤러는 주로 인터페이스 빌더에서 레이아웃 할 수있는 앱의 전체 화면 부분에 적합합니다. 모든 뷰 컨트롤러에는 UIView 또는 해당 하위 클래스 중 하나를 가리키는 뷰 속성이 있지만 그 이상을 관리합니다. View 컨트롤러는 항상 전체 화면이므로 shouldRotateToInterfaceOrientation과 같은 항목을 구현할 수 있습니다. 화면에 5 개의 UIView가있을 수 있지만 하나의보기 컨트롤러 만있을 수 있습니다.

또한 MVC (model-view-controller)의 핵심 부분이기도합니다.

뷰 컨트롤러는 뷰와 모델을 연결합니다. 이론적으로 모델은 수학적으로 작업하고 데이터를 저장하고 다른 모든 UI에 UI를 포함시켜야합니다. 보기가 그려지고 관리되어야합니다. 콘텐츠를 저장해서는 안되며 실제로는 다른 작업을해서는 안됩니다. 뷰 컨트롤러는이 둘을 서로 연결합니다. 모델에서 데이터를 찾아 볼 수 있습니다. 이렇게하면 애플리케이션 별 코드가 줄어 듭니다. 모델과 뷰를 재사용 할 수 있지만 대부분의 경우 수정없이 컨트롤러를 재사용하기가 어렵습니다.

저는 전문가가 아니므로 명확히하기 위해 의견을 말하십시오.

1

뷰 컨트롤러에보기에없는 기능 (또는 그 반대)이 필요한 경우 사용할 항목을 알고 있어야합니다. 귀하의 질문 2의 경우, drawRect 콜백은 UIView에는 사용할 수 있지만 UIViewController에는 사용할 수 없습니다.

지금까지 .xib이있는 한 UIViewController을 사용합니다.

는 그리고 초기화를 넣고 그 viewWillAppearviewDidAppearviewWillDisapperviewDidAppear 방법에 코드 (예를 들어, NSTimer)을 정리하기 좋아합니다. 여러 모달 팝업 및 다중보기 컨트롤러를 다룰 때 단일 입구/출구 지점 팀에서 특히 편리합니다.

관련 문제