Como criar uma ligação para NSApp.dockTile de
-
03-07-2019 - |
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?
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?