Pergunta

Em IB é fácil ligar um rótulo ou campo de texto para keyPath de algum controlador.

O NSDockTile (disponível através de [[NSApp dockTile] setBadgeLabel: @ "123"]) não aparece no IB, e eu não consigo descobrir como programaticamente vincular os seus "badgeLabel" propriedade como você pode vincular um rótulo / textfield / coluna da tabela.

Todas as idéias?

Foi útil?

Solução

NSDockTile não tem qualquer ligações, assim que seu controlador terá que atualizar a telha doca manualmente. Você pode fazer isso usando KVO que teria o mesmo efeito que a ligação-lo.

Criar um contexto como a global:


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

Então, em seu método init:


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

Você então tem que implementar este método para ser notificado das alterações para o caminho da chave:

- (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];
    }
}

Certifique-se de remover o observador quando o objeto controlador vai embora.

Outras dicas

Se NSDockTile faz ligações de apoio, você pode usar o bind:toObject:withKeyPath:options: método para configurar ligações na propriedade badgeLabel. Verifique a documentação para obter detalhes sobre quais argumentos para usar. Se ele não funciona, você poderia implementar valor de chave observando em sua classe de controlador e atualizar o rótulo de cada vez que as alterações de valor, ou mesmo substituir NSDockTile para criar uma subclasse ligações compatível.

Eu tentei muitas variações de bind:toObject:withKeyPath:options: sobre NSDockTile, em um controlador, a fonte de dados. Eu não consigo descobrir uma combinação que funcione. Como alternativa, há uma maneira de ter um objeto BatchController que pode ser ligado à fonte de dados, e em seguida, atualiza o emblema? Como faço para ter um NSObject e torná-lo bindable?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top