NSTableView - alternando entre 2 datasources
-
19-09-2019 - |
Pergunta
Eu tenho um aplicativo de cacau pequeno, ea interface do usuário consiste principalmente de um único NSTableView. No entanto eu tenho 2 listas diferentes de dados que gostaria de exibir na mesma, e em seguida, basta alternar entre os dois. A minha pergunta é, o que você acha que é a melhor maneira de implementar isso?
Agora eu acho que eu poderia usar uma bandeira BOOL a mudança que matriz é usado nos métodos dataSource. Mas eu também seria necessário para alterar a classe NSCell que é usado porque as listas contêm completamente diferentes objetos de dados. Então eu iria precisar recarregar a tabela (faria [table reloadData] recarga tudo isso de forma confiável?).
Ou, eu poderia criar 2 NSTableViews separadas no meu arquivo NIB e alternar a sua visibilidade ... Mas isso parece hackish.
Eu tenho uma boa bastante a compreensão de cacau, mas eu realmente não estou certo como procurar por algo como isso, e estou curioso como outros devs mais experientes resolveria este problema.
Graças.
Solução
Ou, eu poderia criar 2 NSTableViews separadas no meu arquivo NIB e alternar a sua visibilidade ... Mas isso parece hackish.
Não é hackish em tudo. É hackish para usar a mesma exibição de tabela para vários conjuntos de dados díspares.
Apenas criar um NSTabView
tabless com duas abas, colocar um NSTableView
no primeiro separador e outro NSTableView
no segundo separador. Você pode, em seguida, alternar entre as exibições de tabela chamando -selectTabViewItemAtIndex:
na NSTabView
.
Outras dicas
Por que não ter implementações separadas de UITableViewDataSource
e UITableViewDelegate
, e mudança quais os pontos UITableView
para quando o evento de alternância acontece? Parece que seria muito mais limpo do que ter todo esse código condicional em uma implementação. Só porque a maioria dos exemplos mostram a UITableViewController
implementação de ambos os protocolos não significa que eles não podem ser três objetos separados.
A resposta de Sixten Otto é o caminho certo. Dito isto, se eu só queria cortar juntos algo que funcionou, eu poderia fazer algo parecido com isto:
- (UITableViewCell *)cellForRowAtIndexPath:(NSIndexPath *)indexPath {
if (dataSourceOne) {
[self cellForRowAtIndexPathDS1:indexPath];
}
else {
[self cellForRowAtIndexPathDS2:indexPath];
}
}
e, em seguida, implementar duas versões de cellForRowAtIndexPath. Tenho certeza de que o método de dados de recarga irá recarregar tudo na tela.
hackish, mas viável.