Estou criando um aplicativo que usa o SDK do Facebook para autenticar usuários. Estou tentando consolidar a lógica do facebook em uma classe separada. Aqui está o código (simplificado):
import Foundation
class FBManager {
class func fbSessionStateChane(fbSession:FBSession!, fbSessionState:FBSessionState, error:NSError?){
//... handling all session states
FBRequestConnection.startForMeWithCompletionHandler { (conn: FBRequestConnection!, result: AnyObject!, error: NSError!) -> Void in
println("Logged in user: \n\(result)");
let storyboard = UIStoryboard(name: "Main", bundle: NSBundle.mainBundle())
let loggedInView: UserViewController = storyboard.instantiateViewControllerWithIdentifier("loggedInView") as UserViewController
loggedInView.result = result;
//todo: segue to the next view???
}
}
}
Estou usando o método de classe acima para verificar as alterações do estado da sessão e funciona bem.
P: Depois de obter os dados do usuário, como posso seguir para a próxima exibição nessa classe personalizada?
EDIT: para deixar claro, eu tenho um segue com identificador no storyboard e estou tentando encontrar uma maneira de executar um segue de uma classe que não é o controlador de exibição
performSegue:
?Respostas:
Se seus seguimentos existem no storyboard com um identificador de seguimentos entre suas duas visualizações, você pode chamá-lo de forma programática usando:
Para versões mais antigas:
Você também pode fazer:
Ou se você estiver em um controlador de Navegação:
fonte
Você pode usar o NSNotification
Adicione um método de postagem em sua classe personalizada:
Adicione um observador ao seu ViewController:
Adicione função no seu ViewController:
fonte
Se seus seguimentos existem no storyboard com um identificador de seguimentos entre suas duas visualizações, você pode chamá-lo programaticamente usando
Se você estiver no controlador de navegação
Vou recomendar você para uma segunda abordagem usando o controlador de navegação.
fonte
Você pode usar segue assim:
fonte
Swift 3 - Também funciona com o SpriteKit
Você pode usar o NSNotification .
Exemplo:
1.) Crie um segue no storyboard e nomeie o identificador "segue"
2.) Crie uma função no ViewController a partir do qual você está seguindo.
3.) No ViewDidLoad () do seu ViewController, você cria o observador.
Atualização - A última vez que usei isso, tive que alterar a
.addObserver
chamada para o código a seguir para silenciar os erros.4.) No ViewController ou Scene em que você está seguindo, adicione o método Post sempre que desejar que o seguimento seja acionado.
Atualização - A última vez que usei isso, tive que alterar a
.post
chamada para o código a seguir para silenciar os erros.fonte
NotificationCenter.default.addObserver(self, selector: #selector(goToDifferentView), name: NSNotification.Name(rawValue: "segue"), object: nil)
O que você quer fazer é realmente importante para o teste de unidade. Basicamente, você precisa criar uma pequena função local no controlador de exibição. Nomeie a função como qualquer coisa, apenas inclua o
performSegueWithIndentifier
.Em seguida, altere sua classe de utilitário
FBManager
para incluir um inicializador que aceite um argumento de uma função e uma variável para manter a função do ViewController que executa o seguinte.(O init de conveniência permite que você use isso em testes de unidade sem executar as instruções.)
Finalmente, onde você tem // todo: segue para a próxima visualização ???, coloque algo como:
Nos testes de unidade, você pode simplesmente invocá-lo como:
onde doThatThing é sua mudança de fbsession e
UtilClass
é FBManager.Para o seu código real, basta passar
localFunc
(sem parênteses) para a classe FBManager.fonte
Isso funcionou para mim.
Primeiro, forneça ao controlador de exibição em seu storyboard um Storyboard ID dentro do inspetor de identidade. Em seguida, use o seguinte código de exemplo (garantindo que a classe, o nome do storyboard e o ID do storyboard correspondam aos que você está usando):
Para obter mais detalhes, consulte http://sketchytech.blogspot.com/2012/11/instantiate-view-controller-using.html cumprimentos
fonte
Você pode fazer isso usando a
performSegueWithIdentifier
funçãoSintaxe:
Exemplo:
fonte
Outra opção é usar segue modal
PASSO 1: Vá para o storyboard e dê ao View Controller um Storyboard ID . Você pode encontrar onde alterar a ID do storyboard no Identity Inspector, à direita. Vamos chamar o ID do storyboard
ModalViewController
PASSO 2: Abra o controlador de exibição 'remetente' (vamos chamá-lo
ViewController
) e adicione este código a eleObserve que o View Controller que queremos abrir também é chamado
ModalViewController
PASSO 3: Para fechar o ModalViewController, adicione-o
fonte
Isso funcionou para mim:
fonte