보기는 사용자와 상호 작용하는 방법을 알고 있습니다. 일부 데이터를 표시하는 방법, 이벤트를 처리하는 방법 및 사용자에게 피드백을 제공하는 방법을 알고 있습니다.
보기 컨트롤러는 현재 어떻게되는지 알고 있습니다. 표시 할 데이터와 사용자 작업에 대한 대응 방법을 알고 있습니다.
UIButton은 제목과 이미지를 표시하는 방법과 클릭을 추적하는 방법을 알고 있지만 제목이 무엇인지 또는 클릭 한 후에 수행 할 작업을 알지 못합니다.
UITableView는 셀에 데이터를 표시하는 방법과 편집을 처리하는 방법을 알고 있지만 셀을 삭제할 때 표시 할 데이터 나 수행 할 작업을 알지 못합니다. 이를 위해 종종 뷰 컨트롤러가 될 대리자 및 데이터 소스를 사용합니다.
이 부분은 디자인과 유지 관리가 무엇을 어떻게 단순화하는지에 대한 구분입니다. 모든 유형의 테이블 논리에 대해 tableview의 하위 클래스를 만들 수 있지만 다른보기도 제어 할 수 없습니다. 뷰 컨트롤러는 여러 뷰를 제어하고 뷰를 조정할 수 있습니다.
편집 :
그래서 당신이보기 컨트롤러 어떤 시간을 사용해야을 수행해야합니다
- 여러보기 사이를 좌표입니다.
- 모델 데이터와 뷰 간의 좌표입니다.
- 사용자보기에 대한 응답으로 응답합니다.
- 보기를 언로드하고 다시로드하십시오.
뷰 컨트롤러는 엄격히 UIViewController가 아닙니다. UIViewController가 소유하고 일부 뷰를 처리하지만 NSObject 또는 기타에서 파생 된 뷰 컨트롤러가있을 수 있습니다. 뷰 컨트롤러는 UIViewController를 기반으로하는 뷰 계층의 일부를 관리하며 해당 UIViewController가 소유합니다. UIViewController는 응용 프로그램 위임을 기반으로하는 계층 구조의 일부일 수 있으며 탐색, 탭 또는 기타 메타 컨트롤러가 소유 할 수 있습니다.
그래서 응용 프로그램 대리인은 UINavigationController와 같은 0 개 이상의 메타 컨트롤러를 소유합니다. 각 메타 컨트롤러는 하나 이상의 UIViewController를 소유합니다. 각각은 뷰 계층 구조를 소유하며 뷰 계층의 일부를 관리하는 데 도움이되는 여러 개의 간단한 뷰 컨트롤러를 소유 할 수 있습니다. 메타 컨트롤러가 필요하지 않으면 응용 프로그램 대리인이 소유하거나 UIViewController가 될 수 있습니다.
나는 BeachRunnerJoe가 MVC 디자인의 기본 사항을 이해했다고 가정하지만 실제로 초기 iPhone 예제의 일부에는 전용 루트보기 컨트롤러가없는 대신 초기 AppDelegate 클래스를 사용하는 이유가 궁금합니다. Xcode 템플릿은 Window 기반 및 View 기반 응용 프로그램 모두에 존재하므로 크게 나타납니다. 때로는 초기 앱 예제가 기본이므로 NIB 파일을 만들지 않고 직접 프로그래밍 방식으로보기를 생성 할 수도 있습니다. 최근에 iPhone 개발을 배우면서 나는 알아 차리고 스스로에게 물었습니다. –
일반적으로 응용 프로그램 대리자는 뷰 컨트롤러 계층의 소유자로 사용됩니다. 예를 들어 저장된 상태를 복원하는 경우와 같이 어느 뷰 컨트롤러가 먼저로드되는지를 인식하고 전역 범위 모델 개체를 관리 할 수 있습니다. 애플의 예에 관해서는, 나는 그들이 단순한 프로젝트에서 디자인에 대한 고려에 집중하고 있다고 생각한다. 단순한 예에서도 무게를 감안할 때, 애플은 언제나 좋은 디자인 패턴을 사용해야하지만, 설교하는 것을 연습하는 데 어려움을 겪습니다. – drawnonward