Qual é a diferença entre Modal e Push segue no Storyboards?

178

Alguém pode me explicar qual é a diferença exata entre modale pushsegue?

Eu sei que quando usamos pusho segue é adicionado a uma pilha, então quando continuamos usando pushele continua ocupando memória?

Alguém pode me mostrar como esses dois são implementados?

Modalas sequências podem ser criadas simplesmente ctrl-clicke arrastando para o destino, mas quando faço isso com o pushmeu aplicativo falha.

Estou pressionando um botão para um UINavigationControllerque tem um UIViewController.

Gaurav_soni
fonte

Respostas:

174

Um push Segue está adicionando outro VC à pilha de navegação. Isso pressupõe que o VC que origina o push faz parte do mesmo controlador de navegação ao qual o VC que está sendo adicionado à pilha pertence. O gerenciamento de memória não é um problema com os controladores de navegação e uma pilha profunda. Enquanto você estiver cuidando de objetos que possa estar passando de um VC para outro, o tempo de execução cuidará da pilha de navegação. Veja a imagem para uma indicação visual: NavStack

Um Segue modal é apenas um VC apresentando outro VC modalmente. Os VCs não precisam fazer parte de um controlador de navegação e o VC sendo apresentado de forma modal é geralmente considerado um "filho" do VC (pai) apresentador. O VC apresentado de forma modal geralmente é sem barras de navegação ou de tabulação. O VC apresentador também é responsável por descartar o VC modal que ele criou e apresentou.

Espero que isto ajude.

LJ Wilson
fonte
1
@EIJay obrigado pela ótima explicação. Mais uma pergunta: quando devo usar o modal e quando usar o push segue?
Gaurav_soni 22/02
43
Geralmente, quando você quiser mostrar uma visão detalhada de uma visão resumida, use um controlador de navegação e Push Segues. Se a visualização "pai" não estiver realmente relacionada aos dados relacionados à visualização "filho", use um modal. Um bom exemplo para uma visualização modal seria uma visualização de logon. A visualização de logon realmente não tem nenhum relacionamento no que diz respeito aos dados da visualização "pai".
22412 LJ Wilson
5
@TJ Sim, você pode criar "cadeias de modelos". Descartar um VC na cadeia descarta todos os VCs na cadeia - o usuário vê apenas o VC de cima descartado (quando você ativa a animação). É como controladores de navegação.
Constantino Tsarouhas
3
@jchatard Sim. Desde que o seu seguimento seja modal, no storyboard você verá que a barra de navegação não é herdada. Então, basta clicar no primeiro VC da cadeia modal que você possui e clicar no menu Editor -> Incorporar -> Controlador de navegação. Isso definirá um controlador de navegação que será comum a toda a sua cadeia modal. Não que, naquele momento, apenas os passos para exibir o controlador de navegação sejam "modais", enquanto todos os seguimentos dentro de sua cadeia modal devem ser seguidos "push".
HpTerm
3
O push pode ser usado apenas se o VC do qual você está seguindo estiver usando um controlador de navegação. Tente enviar de um VC que não esteja incorporado em um controlador de navegação e isso gerará uma exceção. Portanto, isso realmente não tem nada a ver com a rigidez da conexão dos dados entre pai e filho, mas simplesmente se você está usando um controlador de navegação para gerenciar seus VCs. Você pode fazer exatamente a mesma coisa manualmente usando segues usando transições modais.
smileBot
22

Atualização do Swift 3.0 e XCode 8.2.1

1. Pressione Segue

Push segue foi renomeado como Mostrar segue. Para criar push segue, o controlador de exibição pai precisa ser incorporado no controlador de navegação. O controlador de navegação fornece barra de navegação. Depois de conectar dois controladores de exibição com push segue, o controlador de exibição filho automaticamente terá a barra de navegação na parte superior. O controlador de exibição filho será adicionado na parte superior da pilha de navegação.

insira a descrição da imagem aqui

Push segue também fornece recursos padrão. O controlador de exibição filho terá um botão Voltar que o levará de volta ao controlador de exibição pai. Você também pode deslizar para a direita para abrir o controlador de exibição filho. A animação para push segue é como deslizar as páginas horizontalmente.

insira a descrição da imagem aqui

Embora você possa fazer push push a partir de um controlador de exibição que não esteja em um controlador de navegação, você perderá todos os recursos, como barra de navegação, animação, gesto, etc. Nesse caso, você deve incorporar seu controlador de exibição pai dentro do controlador de exibição de navegação primeiro e depois fazer push push nos controladores de exibição filho.

insira a descrição da imagem aqui

2. Segmento Modal

Um segue modal (isto é, presente modalmente), por outro lado, está sendo apresentado sobre o controlador de exibição atual. O controlador de exibição filho não herdará o controlador de exibição de navegação; portanto, a barra de navegação será perdida se você apresentar segue modal de um controlador de exibição com controlador de exibição de navegação. Você precisa incorporar o controlador de exibição filho no controlador de navegação novamente e iniciar uma nova pilha de navegação, se desejar. Se você quiser voltar ao controlador de exibição pai, precisará implementar isso sozinho e chamar a dismisspartir do código.

insira a descrição da imagem aqui

A animação para segue modal é que o controlador de exibição filho aparecerá na parte inferior da página. O controlador de exibição de navegação também desapareceu nesta demonstração

insira a descrição da imagem aqui

Fangming
fonte
6

A visualização push deve ser construída em a navigationController.

Clique no seu e master view, na barra de menus, escolha:

EDITOR->embed in->navigationController
Simone Pistecchia
fonte
Errado, pushViewtambém pode ser construído SEM navigationControllere esta resposta está incompleta!
Daksh Gargas
1

Isso está pressionando os controles usando os métodos push e segue personalizados para o storyboard Story Board

E o Modal é uma maneira de navegar pelas visualizações sem usar Storyboards.

Pushkraj
fonte
Como criar segue modal sem usar storyboards?
Jianpx
@jianpx: Você pode seguir apenas quando usa storyboards. Caso contrário, você pode usar o controlador de navegação ou o PresentModalViewController para alternar entre visualizações.
Pushkraj
@ Pushkraj obrigado. Então você quer dizer que não há como criar segue por código?
jianpx
@jianpx: Não é necessário. Segue necessário apenas ao usar storyboards.
Pushkraj