문제

이미지를 패턴으로 그리기 위해 NSView의 서브 클래스를 만들었습니다.

@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
}

불행히도, 영상 바인딩은 인터페이스 빌더에 나타나지 않습니다.

인터페이스 빌더에 바인딩을 노출시키기 위해 IBPLUGIN을 만들어야합니까? 그것은 내가 재사용 할 계획이없는 사용자 정의보기에 과도하게 많은 것으로 보인다.

도움이 되었습니까?

해결책

제목에 대한 답변 : 아니요, IB 플러그인없이 (코드로 수행함으로써) 사용자 정의보기를 바인딩 할 수 있습니다.
질문 기관의 질문에 대한 답변 : 예, IB에 바인딩을 노출하려면 IB 플러그인이 필요합니다.

인터페이스 빌더에 넣지 않으면 코드가 인터페이스 빌더 내부에서 실행되지 않습니다. exposeBinding: 메시지는 코드입니다. 따라서 인터페이스 빌더에 넣어야합니다. 이는 IB 플러그인을 작성하는 것을 의미합니다.

또한 IB 플러그인은 이전 IB 팔레트와 다릅니다. 플러그인에는 IB 3이 필요하며 만들기가 훨씬 쉽습니다. 팔레트는 IB 2가 필요하며 만들기 위해 고통 스러웠습니다.

다른 팁

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

그 후, 바인딩은 올바르게 작동하며 인터페이스 빌더에 올바르게 표시되어 부팅!

아니요, 메소드를 사용할 수 있습니다

bind:toObject:withKeyPath:options:

프로그래밍 방식으로 바인딩을 설정합니다. 인터페이스 빌더에 바인딩이 나타나기 위해 IB 팔레트를 만들어야한다고 생각하지만, 일회성 클래스의 경우 재사용을하지 않으려 고하지 않았습니다.

바인딩을 수동으로 수행 할 수 있다면 많은 시간을 절약 할 수 있습니다. 맞춤형 IB 팔레트를 만드는 것은 몇 줄의 수동 바인딩 코드와 비교하여 많은 작업입니다. 그러나 귀하의 요구에 맞춤형 IB 팔레트가 필요한 경우 NSView 하위 클래스가 요구하는 내용을 검토하여 코딩 측면에서 시작합니다. 시작하기에 좋은 곳은 바인딩에 관한 Crawford의 웹 사이트입니다.

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

나는 지난 몇 년 동안 그것을 많이 사용했으며, 내 맞춤형 IB 팔레트 객체와 일반적으로 구속력있는 문제에 많은 도움이되었습니다. 그의 사이트에는 사용자 정의 NSView의 사용자 정의 바인딩을 구체적으로 자세히 설명하는 예가 있습니다.

다른 점에서, 사용자 정의보기는 인터페이스 빌더 환경에서도 작동해야한다는 것입니다. 사용자 정의 NSView 오브젝트의 바인딩 코드에 배치 해야하는 몇 가지 작은 수정 사항이있어 인터페이스 빌더에서 기능하고 바인딩합니다. 이러한 세부 사항은 Crawford 사이트에서도 언급되어 있습니다.

http://homepage.mac.com/mmalc/cocoaexamples/controllers.html#ibbindings

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top