문제

IB에서는 레이블 또는 텍스트 필드를 일부 컨트롤러의 키패스에 쉽게 바인딩 할 수 있습니다.

NSDOCKTILE ([[NSAPP Docktile] SetBadgelabel :@"123"]를 통해 사용 가능)는 IB에 나타나지 않으며 "Badgelabel"속성을 프로그래밍 방식으로 바인딩하는 방법을 알 수 없습니다. .

어떤 아이디어?

도움이 되었습니까?

해결책

NSDOCKTILE에는 바인딩이 없으므로 컨트롤러는 도크 타일을 수동으로 업데이트해야합니다. KVO를 사용 하여이 작업을 수행 할 수 있으며,이를 바인딩하는 것과 동일한 효과를냅니다.

글로벌로 컨텍스트를 만듭니다.


static void* MyContext=(void*)@"MyContext";

그런 다음 Init 방법에서 :


[objectYouWantToWatch addObserver:self forKeyPath:@"dockTileNumber" options:0 context:MyContext];

그런 다음 주요 경로에 대한 변경 사항을 알리려면이 메소드를 구현해야합니다.

- (void) observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
    if (context == MyContext) {
        [[NSApp dockTile] setBadgeLabel:[object valueForKeyPath:keyPath]];
    }
    else {
        [super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
    }
}

컨트롤러 객체가 사라질 때 관찰자를 제거하십시오.

다른 팁

nsdocktile이 바인딩을 지원하는 경우 방법을 사용할 수 있습니다. bind:toObject:withKeyPath:options: Badgelabel 속성에 바인딩을 설정합니다. 사용할 인수에 대한 자세한 내용은 문서를 확인하십시오. 작동하지 않으면 컨트롤러 클래스에서 관찰하는 키 값을 구현하고 값이 변경 될 때마다 레이블을 업데이트하거나 NSDockTile을 재정의하여 바인딩 호환 서브 클래스를 생성 할 수 있습니다.

나는 많은 변형을 시도했다 bind:toObject:withKeyPath:options: nsdocktile, 컨트롤러, 데이터 소스에서. 작동하는 조합을 알 수 없습니다. 또는 데이터 소스에 바인딩 할 수있는 배치 콘트롤러 객체를 갖는 방법이 있습니까? 그런 다음 배지를 업데이트합니까? nsobject를 가져 와서 바인딩 할 수있는 방법은 무엇입니까?

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