1
resposta

pushViewController

Olá, no curso de recursos nativos tem um exercício para chamar a tela de detalhes do aluno para realizar a edição dos dados. N aula foi instruído a utilizar o segue para realizar a chamada da tela de detalhe, porem tentei utilizar o pushViewController para realizar porque queria passar o objeto aluno como parâmetro no init do ViewController de detalhe, e depois la dentro fazer os tratamentos para salvar. Criei o init correto na ViewController de aluno porem ao realizar a navegação a mesma não aparece nenhum componente, a tela fica preta. Saberia informar o motivo? Outra questão é, qual o modo mais utilizado para chamar outras telas, push, segue, instantiateViewController, e quando usar uma ou usar outra?

1 resposta

Oi Rodrigo, tudo bem?

Ótima pergunta.

Quando precisamos chamar outras telas no iOS basicamente podemos fazer isso: programaticamente ou pelo storyboard(segue). As duas maneiras tem o mesmo resultado.

  • Programaticamente:

Como você mencionou acima, você pode passar um objeto por parâmetro, ficaria mais ou menos assim:

storyboard

Para passar um objeto do ViewController para o ViewController 2 precisamos setar um identificador para o ViewController 2 no storyboard:

identificador

Com o identificador criado, agora é só fazer o push do ViewController 2 na action do botão:

push programaticamente

Suponha que precisamos passar o objeto Pessoa por parâmetro:

ViewController 2

parametros

Com a variável criada, agora é só setar no momento que estamos chamando a segunda tela:

setando parametros

Dessa forma conseguimos chamar o ViewController programaticamente e passar parâmetros.

Veja se você implementou dessa forma ;)

Em relação a segunda dúvida, já trabalhei em projetos que o pessoal implementou das duas formas. Mas geralmente, a galera costuma utilizar mais o segue porque com ele você consegue entender a navegação de telas no storyboard.

Aplicativos com muitas telas, fica um pouco complicado de entender o fluxo se a navegação estiver feita programaticamente.

Espero ter ajudado.

Abs.