Pergunta

eu tenho um NSTableView Desejo permitir que os usuários arraste e solte os arquivos de vídeo. Quando eles soltarem o arquivo, ele será adicionado como uma linha na visualização da tabela.

Como eu iria fazer isso? Atualmente, o TableView's retira seus dados de um controlador de matriz (que leva seus dados de um nsmutableArray)

eu encontrei isto documentação, mas não consigo fazer funcionar ..

Eu tenho..

  • Fiz uma classe "TableCon" (que eu mudei para herdar do NSTABLEVIEW, não NSOBJECT)
  • Alterou a classe NSTableView para TableCon
  • Defina a saída delegada do NSTableView para essa classe
  • chamado registerForDraggedTypes no início do tableCon
  • implementado - (NSDragOperation)draggingEntered:(id <NSDraggingInfo>)sender; (novamente no tableCon)

..mas, nada, ele age como se eu nunca mudasse nada (sem erros), o que estou fazendo de errado?

Editar: Eu tentei implementar a sugestão de Boaz Stuller e também encontrei isto descrição da solução (o Primeira resposta inclui a solução para a primeira postagem). Então, o que eu fiz agora é ..

  • Subclasse nsarrayController, que alimenta o conteúdo da tabela View (tableListcon)
  • Adicionar tableView outlet to tableListcon (e apontou para o NSTableView)
  • Implementar validatedrop, writerwswithindexes e aceitação no tableListcon
  • Chamado RegisterfordRaggedTypes na tabela de tabela.

Novamente, não há erros/avisos, mas apenas o método despertado do Método parece ser chamado (nenhum dos outros métodos é chamado)

Foi útil?

Solução

O NStableView lida com arrastar e soltar de maneira diferente das visualizações genéricas, o que é uma coisa boa. Isso significa que você não precisa lidar manualmente os comportamentos complicados de destaque, rastreamento de células e inserção que as tabelas exigem.

Uma descrição do que é necessário pode ser encontrado aqui. Basicamente, você ainda chama -GisterDraggedTypes: (geralmente no seu método -akeFromnib), mas em vez de implementar os métodos NSDraggingDestination, você implementa os vários métodos de origem de dados associados ao arrasto e queda, que podem ser encontrados aqui. Você não precisa subclasse o NStableView para implementar o arrastar e soltar dessa maneira.

Observe esses são métodos de fonte de dados. Você precisa conectar a tomada de fonte de dados da View da tabela à classe que implementa esses métodos para que eles sejam chamados.

Outras dicas

Além do que Boaz disse, parece que você está criando uma subclasse NStableView e, em seguida, fazendo uma instância dessa subclasse o delegado do NStableView. Se você estiver indo para a subclasse, essa subclasse deve ser usada no lugar do NSTableView, não além disso. Além disso, quase sempre é uma violação de preocupações ter uma visão de um delegado para outro objeto.

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