Como faço para manter um NSPathControl atualizado com o caminho da célula selecionada em uma NSBrowser

StackOverflow https://stackoverflow.com/questions/354650

Pergunta

Eu preciso manter um NSPathControl atualizado com o caminho atualmente selecionado em uma NSBrowser, mas eu estou tendo dificuldade para descobrir uma maneira de obter notificações quando o caminho foi alterado a partir do NSBrowser. A maneira ideal de fazer isso seria apenas para ser para observar o caminho da chave caminho no NSBrowser, mas que dá um KVO só pode observar métodos set<key> que retornam mensagem nula e sem atualizações (SetPath retorna um valor de sucesso bool).

Eu também tentei observar o caminho da chave selectedCell, mas eu não estou recebendo notificações quando a seleção não é alterada.

Existe alguma outra maneira muito óbvia de fazer isso que eu estou perdendo?

Foi útil?

Solução

Cortesia de Rob Keniger mais em Cocoa Dev :

Você já olhou para o SimpleBrowser exemplo em / desenvolvedor / Exemplos? isto mostra como obter a seleção atual quando é alterada pelo usuário, basicamente por apenas configurar o ação do NSBrowser.

Isso é realmente a maneira de fazê-lo. Apenas implementar um - (void) broswerClicked:. Método (incluindo o mapeamento lo no construtor de interface) com o que você quer que aconteça cada vez que a seleção muda dentro desse método, por exemplo

- (void)browserClicked:(id)browser {
    self.pathToSelectedCell = [browser path]; // NSPathControl is bound to pathToSelectedCell
}

Outras dicas

Eu verifiquei apenas no IB, e parece que NSBrowser tem um índice de seleção caminhos de ligação (uma matriz de NSIndexPath objetos) que você poderia monitorar com KVO. É estranho, mas eu não vejo qualquer menção a ele nos docs, por isso, pode ser necessário fazer uma pequena pesquisa para ver se isso é algo que você deve ou não usar, mesmo se parece ao trabalho. Se isso acontecer, no seu método de observação KVO você iria encontrar caminho atual do navegador, e convertê-lo em um NSURL o controle caminho pode usar.

Não Se isso funciona há também o - (BOOL)browser:(NSBrowser *)sender selectRow:(NSInteger)row inColumn:(NSInteger)column métodos de delegado e - (BOOL)browser:(NSBrowser *)sender selectCellWithString:(NSString *)title inColumn:(NSInteger)column.

Como de 10,6, pode-se descobrir quais itens são selecionados, utilizando o callback delegado o seguinte:

- (NSIndexSet *)browser:(NSBrowser *)browser selectionIndexesForProposedSelection:(NSIndexSet *)proposedSelectionIndexes inColumn:(NSInteger)column
{
    NSLog(@"New first item of the new selection is at index %@", [proposedSelectionIndexes firstIndex]);
    // Do something with the selected index or indicies
    return proposedSelectionIndexes; // Allow the selection to occur by not changing this
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top