2010-05-24 5 views
0

내 iPhone 앱을 개발하는 방법을 배우고 있지만 특정 개념을 이해하는 데 어려움을 겪고 있습니다.보기 컨트롤러에는 항상 iPhone 앱에 대리인이 있어야합니까?

먼저 모든보기에 대해보기 컨트롤러가 있어야한다고 말합니까? 모든 뷰 컨트롤러에 대해 대리자가 있어야합니까?

또한 mainWindow.nib의 역할은 무엇입니까? 내가 읽은 튜토리얼의 대부분은 그 펜촉을 만지지 않는 것 같습니다. 항상 일어나는 것은 NavController를 루트 컨트롤러로 설정하는 것입니다. 그러면 다른 ViewController가 스택에 푸시되고이 ViewController에 연결된 다른 펜촉이 생깁니다.

그럼 내가 안전하게 주 창문을 무시할 수 있다고 생각합니까?

답변

2

모두 MVC (Model View Controller), innit?

모델은 여러분에게 달려 있습니다. 앱의 기능은 무엇입니까? 폰트 크기 결정 및 터치 이벤트의 벼랑에서 자유로운 앱의 엔진 인 백엔드라고 생각하면됩니다.

보기, 애플은 거의 당신을 위해 그것을 썼다. Textfields 및 테이블과 imageViews를 사용합니다. 인터페이스 빌더를 사용하여 GUI (.nib 패키지)로 함께 어셈블합니다. 표준 뷰 요소를 하위 클래스로 만들어야하는 경우는 거의 없습니다 (사용자 지정 뷰를 그리려는 게임에서 모든 드로잉은 아마도 사용자 지정 임). GUI를 관리하는 데 도움이되면 GUI의 다른 부분을 다른 .nib 파일로 나눌 수 있습니다. 전적으로 당신에게 달려 있습니다.

컨트롤러이므로 GUI를 사용하여 모델을 나타낼 수 있도록 할 일이있을 것입니다. 일부 컨트롤러가 필요합니다. 얼마나? 그러나 많은 사람들이 당신이 관리 할 수 ​​있습니다. 2 개의 하위 뷰가 포함 된 뷰가 있다면 각각 뷰 컨트롤러가 필요합니까? 아니, 아마. 뷰를 모델에 연결하는 코드가 얼마나 복잡합니까?

일부 GUI 패턴은 너무 일반적이어서 Apple이 컨트롤러 코드를 작성하기까지합니다. UINavigationBar에 대한 컨트롤러를 예 : UINavigationController. 따라서 탐색해야하는 계층 적보기가있는 응용 프로그램에서 탐색 모음을 표시해야하는 경우 사용자 고유의 클래스를 작성하는 대신 UINavigationController의 인스턴스를 사용할 수 있습니다. 예!

확실하게, UINavigationController 코드 (또는 다른 viewController)는 우리 모델과 통합하는 방법을 마술처럼 알 수 없습니다. 아니, 할 수 없어. 일반적으로 Cocoa의 경우 대부분 선반에서 작동하는 객체 클래스가있는 경우 뿐만 아니라도 선택적으로 구성 가능한 동작을 가지고 있으므로 우리가 필요에 맞게 조정할 수 있습니다. 대표단으로 수행됩니다. ie Instead UINavigationController를 서브 클래 싱하는 우리는 특정 인스턴스를 어디에서 찾을 것인지 (더 나은 용어를 원한다면) 사용자 정의 행동을 말합니다.

왜? navigationController, tableView 및 텍스트 필드가 있다고 가정 해 보겠습니다. UINavigationController는 대부분 네비게이션 요구 사항을 처리하지만 사용자가 새로운 뷰로 이동할 때마다 미친 QUACK 사운드를 재생해야합니다. UITableView는 대부분 테이블에서 필요한 모든 것입니다. 단, 앞 페이지의 테이블에서 세 번째 행은 다른 행의 두 배가되어야합니다. 그리고 표준, off-the-shelf UITextField 거의 사용자의 텍스트 필드를 처리합니다. 사용자가 북쪽을 향하고있을 때만 텍스트 필드를 편집 할 수 있어야합니다. 이 문제를 처리하는 한 가지 방법은 사용자 지정 UINavigationController, 사용자 지정 tableView 및 사용자 지정 텍스트 필드의 세 가지 새 클래스를 만들고 대신이 메서드를 사용하는 것입니다.위임을 사용하면 클래스를 그대로 사용할 수 있으며 하나의 객체를 세 인스턴스 모두의 대리자로 사용할 수 있습니다. 훨씬 더 명확합니다.

위임은 대부분 선택 사항이며, 문서는 사용자에게 언제나 알려주며 사용자 지정 행동 양식이 필요한지 여부를 알려줍니다.