2012-10-30 2 views
2

슬라이더 및 버튼과 같은 컨트롤을 포함하고 배경색이있는 뷰가 필요합니다. NSView 또는 NSViewController을 서브 클래 싱할지 여부는 확실하지 않습니다. NSView을 서브 클래스 화하고 사용자 정의 배경을 그리고 xib의 컨트롤을 레이아웃하고 콘센트를 NSView 서브 클래스로 설정할 수 있다고 생각했습니다.하위 클래스 NSViewController 또는 NSView

일부 버튼은 내가이 논리가 NSView에서 수행되어야하고, 오히려 NSViewController보다 버튼 토글 토글에게 자기를 관리해야하는 경우 NSViewController 통지 할 생각, 예를 들면 재생/일시 정지 버튼을 전환 할 필요가있다.

그러나 하위 클래스를 만들 때 xib을 만드는 옵션이 회색으로 표시되며 NSViewController 인 경우에만 가능합니다. 그렇다면 NSViewController에 콘센트가 있어야합니까?

myView.playPauseButton을 원했지만, myViewController.playPauseButton이 있어야 할 것 같습니까?

답변

-1

NSViewController와 init을 서브 클래스로 만들려면 코드에서 수동으로 서브 뷰를 xib 또는 레이아웃으로 배치하는 것이 가장 좋습니다. 내 경험에 비추어 NSView를 서브 클래 싱하는 것은 내가 원하는 구현을 포함하여 내가 원하는 방식으로 작동하지 못했다.

3

슬라이더 및 버튼과 같은 컨트롤을 포함하는보기가 있어야하며 배경색이 있어야합니다. NSView 또는 NSViewController를 서브 클래 싱할지 여부를 알 수 없습니다. 나는 NSView를 서브 클래스 화하고, 사용자 정의 배경을 그린 다음, 컨트롤을 xib에 레이아웃하고 NSView 서브 클래스에 아웃렛을 설정할 수 있다고 생각했다.

xib를 사용하려면 NSViewController 하위 클래스로 이동해야합니다. 그것이 다른 것들 사이에있는 것입니다.

일반적으로 수행하려는 작업 (여러 컨트롤을 하나로 묶음)은 NSViewController입니다.

Model-View-Controller 패턴 (보기 컨트롤러와 뷰가 나오는 위치)에서 볼 수도 있습니다.보기는 사물이 나타나는 방식과 관련이 있습니다. 컨트롤러는 사용자 상호 작용 (및 모델과의 상호 작용)과 관련이 있습니다.

NSView 하위 클래스를 정의하고 프로그래밍 방식으로 또는 IB (슬라이더와 버튼을 하위 뷰로 추가)에서 내용을 정의 할 수 있지만, 그렇게하지 않으면 큰 장점이 없습니다. 일종의 특정 컨트롤을 제공합니다.

편집 : 당신이 사용하는 사용자 정의를 사용하고 싶은 코멘트에

당신의 상태를하는 NSSplitView의 내부 NSView을 IB 정의. 이것은 상황을 좀 더 상황에 맞게 만듭니다.

이제는 많은 디자인 옵션이 있습니다. 예를 들어, 자신 만의 MySplitController을 정의하여 분할보기의 하위보기를로드해야하는 것으로 지정할 수 있습니다.

그러나 목표를 올바르게 이해한다면, IB가 허용하는 기본보기 유형 중 하나 인 것처럼 NSSplitView 내에서 NSView를 정의하고 NSView를 NSViewplitView 내에서 사용하도록하고 싶습니다.

Interface Builder Plug-ins에 의해 허용되었습니다. 불행히도 Xcode 4에서는 더 이상 지원되지 않습니다.

그럼 내가 볼 수있는 유일한 옵션은, 예를 들어, NSViewMyCustomView를 서브 클래스를 정의하는 다음의 initWithFrame: 방법으로 당신이 그것을에 정의 된 뷰를 식별의 XIB 파일을로드하고, 하위 뷰로 추가. 일을 단순화하기 위해

NSNib *nib = [[[NSNib alloc] initWithNibNamed:@"MyView" bundle:nil] autorelease]; 
NSArray *topLevelObjects; 
if (![nib instantiateWithOwner:customViewOwner topLevelObjects:&topLevelObjects]) { 
    //- handle error 
} 

MyView *myView = nil; 
for (id topLevelObject in topLevelObjects) { 
    if ([topLevelObject isKindOfClass:[MyView class]) { 
    myView = topLevelObject; 
    break; 
    } 
} 

, 당신은 사용자 정의를 정의이 XIB 파일을 가질 수 있습니다

특히, 당신은 XIB 사용자 정의보기가 발견 될 중 최고 수준의 개체를 파일을로드하려면이 코드를 사용할 수 있습니다 NSView와 유비쿼터스 File 's Owner (뷰를 나머지 앱에 통합하는 링크입니다).

본인은 customViewOwnerinstantiateWithOwner으로 전달합니다.이보기는 사용자 정의보기에서 오는 모든 동작에 응답하고 필요할 때 상태를 설정하는 주보기 컨트롤러 또는 앱 대리인이됩니다. 이 클래스는 xib의 파일 소유자이기 때문에 실제로 모듈화 된 디자인을 사용하려면 특정 프로젝트에서 하위 클래스로 정의한 MyCustomViewController을 정의하는 것이 좋습니다.

사용자 정의 NSView 하위 클래스를 정의한 후에는 NSSplitView에 통합하기 위해 수행해야 할 작업은 NSSplitView의 하위 뷰 클래스를 MyCustomView으로 설정하는 것입니다.

이것은 IB 플러그인을 사용하는 것만 큼 단순하지는 않지만 다른 xib 파일에 정의 된보기를 통합하는 목적에 적합 할 수 있습니다.

+0

그래서 NSViewController를 서브 클래 싱했습니다. 인터페이스 빌더 (메인 펜의 xib에 별도의 펜촉으로)에 내 컨트롤을 추가했는데, 주 ​​펜촉의 창에 뷰 컨트롤러의 뷰를 추가하려면 어떻게해야합니까? –

+0

당신의 앱 델리게이트에서, 당신은 사용자 정의 뷰 컨트롤러를 인스턴스화하고 그것을 강력한 속성으로 저장 한 다음'myController.view'를 윈도우에 서브 뷰 ('addSubview :')로 추가합니다. – sergio

+0

그래서 IB에서 할 수 없습니까? –

관련 문제