Instantiate e Present ViewController em Swift: Guia completo com respostas para perguntas frequentes

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Instantiate e Present ViewController em Swift: Análise completa com exemplos e respostas para perguntas frequentes

\n\n

Olá, colegas! Se você já se deparou com a tarefa de criar e exibir programaticamente uma nova tela em um aplicativo iOS em Swift, certamente já se perguntou: "Como criar corretamente um ViewController a partir do Storyboard?", "Como passar dados antes da exibição?" e "Qual a diferença entre Segue e Present manual?".

\n\n

Este tópico é um dos mais populares no Stack Overflow (milhares de visualizações!), e não é à toa. À primeira vista, tudo parece simples, mas o diabo, como sempre, está nos detalhes. Vamos analisar todas as nuances para que você nunca mais se confunda com instantiate viewController Swift e present viewController Swift.

\n\n

1. Método básico: Instantiate a partir do Storyboard

\n\n

O cenário mais comum é você ter um Storyboard com um controlador que possui um Storyboard ID atribuído. Sem esse identificador, você não conseguirá criar uma instância do controlador programaticamente.

\n\n

Passo 1: Configuração do Storyboard ID

\n

Abra o Storyboard, selecione o ViewController desejado, vá para o inspetor Identity Inspector (ícone com crachá de identificação) e no campo Storyboard ID insira um nome único, por exemplo DetailViewController. Certifique-se também de que a caixa de seleção Use Storyboard ID esteja ativa.

\n\n

Passo 2: Código para instantiate e present

\n

Agora, no local desejado do seu código (por exemplo, ao clicar em um botão), escreva:

\n\n
import UIKit\n\nclass MainViewController: UIViewController {\n\n    @IBAction func showDetailTapped(_ sender: UIButton) {\n        // 1. Obtém a referência ao Storyboard\n        let storyboard = UIStoryboard(name: "Main", bundle: nil)\n        \n        // 2. Cria uma instância do controlador pelo seu Storyboard ID\n        guard let detailVC = storyboard.instantiateViewController(withIdentifier: "DetailViewController") as? DetailViewController else {\n            fatalError("Não foi possível encontrar o controlador com o ID DetailViewController")\n        }\n        \n        // 3. Exibe o controlador modalmente\n        present(detailVC, animated: true, completion: nil)\n    }\n}
\n\n

Este é um exemplo clássico de instantiate viewController Swift. Observe o guard let — é uma extração segura que o protegerá de uma falha do aplicativo se o ID foi digitado incorretamente.

\n\n

2. Present vs Push: quando usar cada um?

\n\n

Muitos iniciantes confundem present (exibição modal) com push (empurrar na pilha de navegação). Vamos analisar a diferença.

\n\n
    \n
  • Present — é uma exibição modal. O controlador aparece de baixo (ou com outra animação) e não está vinculado à pilha de navegação. Usado para telas temporárias: login, alertas, formulários.
  • \n
  • Push — funciona apenas dentro de um UINavigationController. O controlador é "empurrado" para a pilha, aparece à direita (por padrão) e recebe automaticamente um botão "Voltar". Ideal para telas hierárquicas: lista -> detalhes.
  • \n
\n\n

Para push, use o método navigationController?.pushViewController(_:animated:).

\n\n
// Push (requer UINavigationController)\nif let navigationController = navigationController {\n    navigationController.pushViewController(detailVC, animated: true)\n} else {\n    present(detailVC, animated: true, completion: nil) // fallback\n}
\n\n

3. Passagem de dados antes do Present

\n\n

Uma das perguntas mais frequentes: "Como passar dados para um novo ViewController antes que ele apareça?". A resposta é simples: use propriedades ou métodos do controlador antes de chamar o present.

\n\n

Exemplo com passagem de string

\n

Suponha que no DetailViewController exista a propriedade:

\n\n
class DetailViewController: UIViewController {\n    var receivedMessage: String = ""\n    \n    ov                

Blogs

Book Recommendations