2009-06-12 8 views
0

비교적 간단한 앱을 가지고 있습니다. 사용자가 상호 작용하는 전체 화면 UIView 하위 클래스 (musicGridView) 및 ViewController 및 mainWindow.xib뿐만 아니라이 클래스를로드하는 UIScrollView 하위 클래스 (scrollView)가 있습니다.MVC : 뷰를로드 할 위치는 어디입니까?

지금 당장은, myViewController 유형의 펜촉에로드 된 viewController 인스턴스가 있습니다. nib에는 또한 myUIView의 인스턴스가 있으며 myViewController는이를 가리 킵니다. AppDelegate에에서

, 나는이 작업을 수행 : 내가 생각

[window addSubview:scrollView]; 
[scrollView addSubview: viewController.view]; 
scrollView.musicGridView = (MusicGridView*) viewController.view; 

가 잘못된 것입니다. 이상적으로 appDelegate에는 scrollView의 인스턴스가 없습니다.

scrollView의 AwakeFromNib 클래스에서 scrollView에 대한 초기화를 수행합니다.

내가 생각하는 방식은 appDelegate에서 [window addSubview : viewController.view]를로드 한 다음 viewController를 musicGridView 대신 scrollView 인스턴스로 지정하는 것입니다. 그런 다음 scrollView에서 awakeFromNib은 musicGridView의 하위 뷰를 추가합니다.

궁극적으로 사용자가 왼쪽으로 스크롤하여 접근 할 수있는 사이드 바 TabBar (주어진 API에서는 불가능 함) 인 scrollView가 소유하고있는 다른보기를 만들고 싶습니다.

그래서 다른 MVC 물건들 사이에, viewController는 scrollView를 가리켜 야하는데, 여기에는 musicGridView를 포함한 다른 모든 UIView 하위 클래스가 포함되어 있어야합니까?

+0

그래서 ... 나는 이것을 시도하고 그냥 빈 화면이 나타납니다. 내가 어디로 잘못 가고 있는지 모르겠다. – Craig

답변

0

인터페이스 빌더를 사용하여 UI를 디자인하지 않은 것처럼 들립니다. 이것은 새로운 프로젝트이므로, 그렇게하는 것이 좋습니다. 이런 식으로 코드를 작성할 필요는 없습니다. 그러나 당신은 당신의 출구와 행동을 설명 할 필요가 있습니다.

IB를 다룰 때 알아야 할 가장 중요한 두 가지 사항은 IBOutletIBAction 키워드입니다.

샘플 클래스 헤더 :

@interface MyClass : NSObject { 
    IBOutlet UIScrollView* myScrollView; 
} 

- (IBAction) doWork; 

@end 

이제 마우스를 대상으로 소스를 드래그하여 인터페이스 빌더를 사용하여이 두 가지를 연결할 수 있습니다. 이를 수행하는 방법에 대한 더 자세한 설명이 필요하면 YouTube에 IB에 대한 많은 자습서 비디오가 있습니다.

0

저는 UI 디자인을 위해 인터페이스 빌더를 사용하지 않는 사람입니다. 내 경험상, 당신은 모두 IB 나 모든 프로그래밍 방식으로 갈 필요가 있습니다. 귀하의 특정 문제를 해결하기 위해, 당신은 귀하의 musicGridView 인스턴스 또는 UIScrollView의 확장이 필요하다고 생각합니다.

이것은 사용자 정의 viewController의 loadView 메소드에서 수행 할 수 있습니다. 일반 old UIView가 아닌 ​​단순히 UIScrollView로 초기화하고 추가 할 수 있습니다. 전술 한 바와 같이 뷰를 설정에는 loadView 방법 구현해야 UIViewController에 의 UIViewController Class Reference

모든 서브 클래스에서 확인 된 바와 같이

그러나,이 방법은, IB를 중심 방식과 호환되지 속성 너브 파일에서보기를로드하지 않는 한.

관련 문제