Questão
Comecei a tomar um olhar de novo Swift
sobre Xcode 6
, e eu tentei alguns projectos de demonstração e tutoriais. Agora estou preso em:
Instanciando e depois apresentando um viewController
de um storyboard específico
Solução Objective-C
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"myStoryboardName" bundle:nil];
UIViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"myVCID"];
[self presentViewController:vc animated:YES completion:nil];
Como conseguir isso no Swift?
ios
objective-c
swift
uiviewcontroller
E-Riddie
fonte
fonte
;
! ;) Você se importaria de elaborar oas UIViewController
? Por que isso é necessário?as
A palavra-chave é usada para tipografia. É o mesmo que(UIViewController *)anObject
no objetivo cinstantiateViewControllerWithIdentifier
retornosAnyObject
(id
equivalente em Swift) e declarovc
comoUIViewController
, tenho que escreverAnyObject
paraUIViewController
.Para as pessoas que usam a resposta de @ akashivskyy para instanciar
UIViewController
e estão tendo a exceção:Dica rápida:
Implementar manualmente
required init?(coder aDecoder: NSCoder)
em seu destinoUIViewController
que você está tentando instanciarSe você precisar de mais descrição, consulte a minha resposta aqui
fonte
init(coder aDecoder: NSCoder!)
"obrigatório". Então agora você deve escrever o seguinte:required init(coder aDecoder: NSCoder!)
Este link possui as duas implementações:
Rápido:
Objetivo C
Este link possui um código para iniciar o viewcontroller no mesmo storyboard
fonte
A resposta de akashivskyy funciona muito bem! Porém, caso você tenha algum problema ao retornar do controlador de exibição apresentado, essa alternativa pode ser útil. Funcionou para mim!
Rápido:
Obj-C:
fonte
O código atualizado do Swift 4.2 é
fonte
Isso funcionou bem para mim quando o coloquei no AppDelegate
fonte
Se você deseja apresentá-lo de forma modal, deve ter algo como:
fonte
Eu gostaria de sugerir uma maneira muito mais limpa. Isso será útil quando tivermos vários storyboards
1.Crie uma estrutura com todos os seus storyboards
2. Crie uma extensão UIStoryboard como esta
Dê ao identificador do storyboard o nome da classe e use o código abaixo para instanciar
fonte
Swift 4:
fonte
Se você tem um Viewcontroller que não usa nenhum storyboard / Xib, pode enviar para esse VC em particular, como na chamada abaixo:
fonte
Swift 3
fonte
Eu sei que é um thread antigo, mas acho que a solução atual (usando o identificador de string codificado para determinado controlador de exibição) é muito propensa a erros.
Eu criei um script de tempo de compilação (que você pode acessar aqui ), que criará uma maneira segura do compilador para acessar e instanciar controladores de exibição de todo o storyboard no projeto em questão.
Por exemplo, o controlador de exibição chamado vc1 no Main.storyboard será instanciado da seguinte forma:
fonte
Não importa o que eu tentei, ele simplesmente não funcionaria para mim - sem erros, mas também sem um novo controlador de exibição na tela. Não sei por que, mas envolvê-lo na função timeout finalmente o fez funcionar:
fonte
Swift 5
fonte
Eu criei uma biblioteca que lidará com isso muito mais fácil com melhor sintaxe:
https://github.com/Jasperav/Storyboardable
Basta alterar o Storyboard.swift e deixar o
ViewControllers
conformeStoryboardable
.fonte