2009-03-03 3 views
14

패턴으로 이미지를 그리는 NSView의 하위 클래스를 만들었습니다.사용자 정의 NSView 바인딩하기 : IBPlugin을 생성해야합니까?

@interface CePatternView : NSView 
{ 
    NSImage* image; 
    id  observableObjectForImage; 
    NSString* keyPathForImage; 
} 

@end 

바인딩을 노출하기 위해 다음을 구현했습니다.

+ (void)initialize 
{ 
    // Expose the "image" binding to IB. 
    [self exposeBinding:@"image"]; 
} 

- (Class)valueClassForBinding:(NSString *)binding 
{ 
    if([binding isEqualToString:@"image"]) 
     return [NSImage class]; 
    return nil; // Unknown binding 
} 

불행히도 이미지 바인딩이 표시되지 않습니다. 인터페이스 빌더.

Interface Builder에서 바인딩을 노출하려면 실제로 IBPlugin을 만들어야합니까? 그냥 재사용 할 계획이없는 커스텀 뷰를위한 과도한 길이다.

답변

14

답변 : 아니, 당신은 (코드에서 수행하여)는 IB 플러그인없이 사용자 정의보기를 바인딩 할 수 있습니다.
본문 질문 : 예, IB에서 바인딩을 노출하려면 IB 플러그인이 필요합니다.

Interface Builder에 코드를 넣지 않고 코드가 Interface Builder에서 실행되지 않으며 그 코드가 exposeBinding: 메시지입니다. 따라서 Interface Builder에 입력해야합니다. 이는 IB 플러그인을 작성한다는 의미입니다.

또한 IB 플러그인은 기존 IB 팔레트와 다릅니다. 플러그인에는 IB 3이 필요하며 쉽게 만들 수 있습니다. 팔레트에는 IB 2가 필요하며 작성하는 데 어려움이 있습니다.

+0

누구나 Xcode 6에서 상태를 알 수 있습니까? – Jay

+0

@Jay : Bindings의 경우 변경되지 않았다고 생각합니다. 새 inspectable 속성을 만들 수는 있지만 Bindings AFAIK로 표시되지는 않습니다. Xcode 6 이상에서 새로운 질문을하고 싶을 수도 있습니다. –

2

아니, 당신은

bind:toObject:withKeyPath:options:

당신의 프로그래밍 바인딩을 설정하는 방법을 사용할 수 있습니다. 인터페이스 작성기에 바인딩을 표시하려면 IB 팔레트를 만들어야한다고 생각하지만 재사용하지 않으려는 일회용 클래스의 경우 결코 괴롭히지 않았습니다.

+0

프로그래밍 방식으로 바인딩 할 수 있다는 것을 알고 있지만 실제로 IB에서 수행해야합니다. 어쨌든, 정말로 당신 대답에 감사드립니다, 알렉스. –

2

바인딩을 수동으로 관리 할 수 ​​있다면 많은 시간을 절약 할 수 있습니다. 사용자 정의 IB 팔레트를 작성하는 것은 몇 줄의 수동 바인딩 코드와 비교할 때 많은 작업입니다. 그러나 필요에 따라 사용자 정의 IB 팔레트가 필요한 경우 NSView 하위 클래스에 코딩 방식으로 필요한 항목을 검토하여 시작합니다. 나는 지난 몇 년 동안 그것을 많이 사용했습니다

http://homepage.mac.com/mmalc/CocoaExamples/controllers.html

, 내 사용자 정의 IB 팔레트 객체와의 결합 문제에 많은 도움이되었습니다 :보고 시작하는 좋은 장소는 바인딩에 크로포드의 웹 사이트입니다 일반. 그의 사이트에는 커스텀 바인딩으로 커스텀 NSView를 자세하게 묘사 한 예제가 있습니다.

다른 점은 사용자 정의보기가 인터페이스 작성기 환경에서도 작동해야한다는 것입니다. 인터페이스 작성기에서 올바르게 작동하고 바인딩되도록 사용자 정의 NSView 객체의 바인딩 코드에 삽입해야하는 몇 가지 작은 수정 사항이 있습니다. 이러한 세부 사항은 크로포드의 사이트에 설명되어 있습니다 : 제목

http://homepage.mac.com/mmalc/CocoaExamples/controllers.html#ibBindings

12

다른 컨트롤러 (예 : toolTip)를 사용하여 내 컨트롤러 개체를 내보기 개체에 바인딩 한 다음 텍스트 편집기를 사용하여 XIB 파일을 편집하고 XML을 수동으로 변경했습니다.

그런 다음 바인딩이 제대로 작동하고 Interface Builder에 올바르게 부팅됩니다!

+1

IB Plugin을하고 싶지 않았기 때문에 나는 그저 나 자신을 만들었습니다. +1! –

+0

Xcode 4는 IB 플러그인에 대한 지원을 중단 했으므로 응용 프로그램 코드에서 원하지 않는 경우이 옵션이 가장 좋은 것으로 보입니다. http://www.cocoabuilder.com/archive/cocoa/307371-how-does-apple-want-us-to-deal-with-custom-elements-in-xcode-4-with-ibplugins-having-been- killed.html # 307599 –

+0

환상적인 솔루션! 내가 예상했던 것보다 훨씬 쉽게 편집 할 수 있으며 일단 철수하면 완벽하게 IB로 나타납니다. 고맙습니다! – andyvn22