초보자로서 IB와 가능한 모든 연결이 나에게 어리 석다. 내가 찾은 대부분의 튜토리얼은 스파게티 코드의 환생이라고 부르는데, 얽힘은 드래그로 생성 된 모든 연결입니다. 물론 뷰의 레이아웃을 위해 IB를 사용하고 싶습니다. (시각적 요소를 배치하는 크기는 &입니다.) 이것이 바로 IB의 장점입니다. 그러나 컨트롤러는 뷰가 아니므로 모든 컨트롤러가 전적으로 코드이고 IB의 어느 곳에도 나타나지 않으면 혼란스럽지 않습니다. 나는 이것이 스파게티를 최소화 할 것으로 생각한다. 또한 1 회 시청 당 (one-xib-per-view) 훈계를 권장합니다. 이를 위해 여기에 질문이 있습니다.이 전략을 따르는 예제 프로젝트는 어디에서 찾을 수 있습니까?xib에서 컨트롤러를 유지하는 방법
답변
좋은 질문입니다. 내가 고수하려고하는 패턴은 코드에서 컨트롤러를 만들고 IBOutlets와 IBActions를 해당 코드와 상호 작용하는 XIB/NIB에 추가하고 컨트롤러의 생성자에서 "self"로 XIB/NIB를로드하는 것입니다 소유자 및 IB에서 "File 's Owner"자리 표시 자에 물건을 연결합니다.이 자리 표시 자의 ID는 내 컨트롤러의 클래스로 지정됩니다.
예제 프로젝트 세트가 없지만, XIB 파일이나 코드에서 컨트롤러를 작성해야하는 경우와 작동 방식에 대한 정보를 제공 할 것입니다.
사용자의 동작으로 컨트롤러를 동적으로 생성 한 경우 일반적으로 컨트롤러를 XIB 파일에서 인스턴스화하지 않습니다. 대신, 위의 해악처럼 코드에서 인스턴스를 생성 할 것입니다. 일단 그렇게하면 코드로 만든이 컨트롤러를 IB에서 만든 사용자 인터페이스 요소에 연결하는 메커니즘이 필요합니다.
IB가 해결하기 위해 제공하는 메커니즘은 파일 소유자입니다. Interface Builder를 사용하려면 파일 소유자를 마스터하는 것이 필수적입니다.
파일의 소유자가 XIB 파일의 "in"인 개체가 아니며 XIB 파일에 표시된 개체입니다. XIB 파일을로드 할 때 이미 존재할 개체의 자리 표시 자입니다. 런타임에 NIB 파일을로드하면 NSBundle 메서드가로드됩니다. [NSBundle loadNibNamed : ownwer : options :]. owner 매개 변수는 XIB/NIB 파일에서 파일의 소유자 자리 표시 자 개체를 확인하는 데 사용됩니다. 파일이 런타임에로드되면 파일 소유자에 대해 수행 된 모든 연결은 소유자 매개 변수로 전달 된 NSBundle 메서드에 대한 객체와 비교됩니다. iPhone에서는 NIB 파일을 직접로드하지 않습니다. 대신 UIViewController 그것을 않습니다.
- (void)loadView {
[[self nibBundle] loadNibNamed:[self nibName] owner:self options:nil];
}
그래서, 파일의 소유자로 XIB 파일의 요소를 연결하여, 당신은 당신의 뷰 컨트롤러에 연결됩니다 : UIViewController에의에는 loadView 메소드의 디폴트의 구현은 다음과 같이 표시 될 수 있습니다.
응용 프로그램에 정적으로 존재하는 컨트롤러가 있습니다. 그들은 영원히 살아있을 것입니다. 루트 항목과 함께 탐색 또는 탭 컨트롤러는 일반적으로 응용 프로그램의 전체 수명 동안 살아 있습니다. 이 경우 MainWindow.xib 파일에 View Controller를 설정합니다. 대부분의 다른 컨트롤러는 동적으로 생성되며 사용자가 일을 처리 할 때 프로그래밍 방식으로 생성됩니다.
- 1. xib에서 내 UIButtons는 어떻게됩니까?
- 2. XIB에서 사용자 정의 셀을로드하는 가장 좋은 방법
- 3. XCOde 4 xib에서 뷰를 회전하는 방법?
- 4. 다른 XIB에서 조치
- 5. Xib에서 scrollView 문제가 발생했습니다.
- 6. 타이머를 사용하여 시간을 유지하는 것은 임베디드 마이크로 컨트롤러를 중단합니다
- 7. 모델 및 컨트롤러를 CALayer 기반 UI와 별도로 유지하는 방법은 무엇입니까?
- 8. XIB에서 사용할 수없는 외부 글꼴
- 9. 다른 XIB에서 작업을 수행 하시겠습니까?
- 10. 하나의 ViewController 만있는 XIB에서 전환
- 11. 최대 절전 모드 - 부모만을 유지하는 방법, 아이들을 그대로 유지하는 방법
- 12. xml 값을 다른 컨트롤러에 유지하는 방법 xcode
- 13. scroller의 속도를 유지하는 방법?
- 14. 스크롤러의 속도를 유지하는 방법?
- 15. 무결성을 유지하는 방법?
- 16. 세션 속성을 유지하는 방법
- 17. Stack에 fieldManager를 유지하는 방법
- 18. 범위에서 변수를 유지하는 방법
- 19. 콘텐츠로 꼬리말을 유지하는 방법
- 20. 세션 기록을 유지하는 방법?
- 21. javax.persistence.ManyToOne을 올바르게 유지하는 방법
- 22. 순서대로 유지하는 방법
- 23. 세션을 유지하는 방법
- 24. MVC 모델을 마른 체로 유지하는 방법
- 25. 보기가있는 탐색 컨트롤러를 제거하는 방법
- 26. UITabBarController보기 컨트롤러를 느리게 만드는 방법?
- 27. iPhone :보기 컨트롤러를 열거하는 방법?
- 28. iPhone - 각보기 컨트롤러를 저장하는 방법?
- 29. presentModalViewController로 열린보기 컨트롤러를 닫는 방법 :
- 30. CanCan - 모덜리스 컨트롤러를 설치하는 방법?
감사합니다. 존, 도움이되는 정보입니다. 나는 여전히 IB 측에서 컨트롤러를 갖지 않는 전략을 시도하고 싶다. 그것이 할 수 있다는 것에 동의하십니까? 나는 여전히 코드 예제를 찾고있다 ... – bedouger
모든 것이 가능하다. 그러나 나는 위에 열거 한 접근법을 추천 할 것이다. MainWindow.xib 파일에 정적 컨트롤러를 만들고 사용자 동작에 대한 응답으로 대부분의 (일반적으로 모두) 다른 컨트롤러를 코드에 만듭니다. –