Pergunta

Uma espécie de pergunta simples. Eu tenho uma visão de tabela em um controlador de navegação. Quando eu toco uma célula, ele empurra um controlador de exibição com as informações da célula, para que eu possa editá -la na nova visualização. Agora está funcionando correto (podemos chamá -lo de InformationPath: "RootViewController -> empurrar ViewController"). Mas quando clico em Salvar na nova visualização, quero que os valores editados voltem para o rootViewController antes de ligar para o PopViewController (InformationPath: "Emputado ViewController -> rootViewController"), para que os valores editados possam ser exibidos no TableView.

Qual é a abordagem correta para isso?

EDITAR:

PushViewController e PopViewController estão funcionando. Só pedi a melhor abordagem para obter as informações editadas de volta ao RootViewController para exibição no TableView, quando o Button-Button (PopViewController) foi chamado. Acho que vou ter que editar o Plist com as novas informações diretamente do ViewController empurrado. Embora eu prefira enviar as novas informações para o rootViewController e fazer com que eles lidem com o acesso ao arquivo da plata.

Foi útil?

Solução

Eu tenho a mesma situação - duas visualizações de tabela. A primeira TV exibe uma lista de registros de banco de dados e, quando é tocada, ele passa para o segundo tabela de tabela, que exibe os detalhes do registro. Faço isso empurrando os detalhes TabelaViewController para a pilha de controladores de navegação. Até agora, vá e bastante simples.

O problema que encontrei foi que, depois de atualizar o registro na exibição da tabela Detalhes (controlador), eu queria informar a tabela da tabela da lista, para que pudesse atualizar a lista de registros.

A primeira coisa que fiz foi adicionar uma propriedade ao controlador de exibição da tabela de detalhes para que, quando uma linha fosse selecionada na lista de registros, o controlador da lista pudesse passar a entidade gerenciada por dados principais para o controlador de detalhes.

Ao mesmo tempo, também adicionei o controlador de lista como observador de eventos principais de mudança de dados como este:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(dataSaved:) name:NSManagedObjectContextDidSaveNotification object:nil];

Portanto, se a tabela de detalhes e atualizar o controlador, o controlador da lista possui dataSaved: Método chamado, passando um objeto NSNotification.

No dataSaved: Método I Examino o objeto e, se a entidade de dados principal editada estiver na lista atualizada, defini um sinalizador para sinalizar uma atualização é necessária. No entanto, se houver um registro na lista inserida, isso significa que um novo registro foi criado e inserido no banco de dados, para que um sinalizador esteja definido para acionar uma recarga completa da visualização da tabela da lista.

Quando o usuário retorna ao controlador de visualização da lista, o viewDidAppear: O método é acionado. Neste método, examino as bandeiras e chamo

- (void)reloadRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation

Para recarregar o registro específico, se o registro foi atualizado ou informe à tabela View para fazer uma recarga completa se houver uma inserção de um novo registro.

Por fim, removo o controlador de lista como observador das notificações de dados principais, porque não está mais interessado.

Não sei se essa é a maneira recomendada de fazer isso, mas até agora está funcionando para mim.

Outras dicas

Você pode tentar recarregar o PopViewController, mas deve postar algum código.

Todos os uiviewControllers têm um navigationController método. Quando você empurra um controlador de exibição para um controlador de navegação, essa propriedade está definida para apontar para o controlador de navegação.

Então, basta ligar [self.navigationController popViewControllerAnimated:YES]; no controlador de exibição.

Além disso, não confunda visualizações e visualize controladores. Ao clicar em Salvar na exibição, certifique -se de que o botão Salvar chama um método no seu controlador de exibição, que por sua vez fala com o controlador de navegação.

Ao tocar em uma linha, você está indo para uma nova visão com informações apropriadas.

Aqui você realiza alguma operação, como edição de dados. Portanto, primeiro salve as alterações no clique no botão Salvar (ligando para uma ibação) e neste método ibaction verificará o wheter (as alterações são salvas com sucesso), em seguida, ligue

Self.NavigationController PopViewControlleRenimated: Sim];

E verifique se a tabela recarrega -se por bancos de bancos atualizados (para esta matriz de dados de dados chamando o método do banco de dados no ViewWillappear).

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