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.

Foi útil?

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.

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