O que é um StoryBoard ID e como posso usá-lo?

110

eu sou novo no desenvolvimento de IOS e recentemente comecei no Xcode 4.5. Eu vi para cada viewController que eu poderia definir algumas variáveis ​​de identidade, incluindo o ID do storyboard. O que é isso e como posso usar?

insira a descrição da imagem aqui

Comecei a pesquisar no stackoverflow e não consegui encontrar nenhuma explicação para isso. Presumi que não é apenas um rótulo estúpido que posso definir para lembrar do meu controlador, certo? O que isso faz?

RTB
fonte

Respostas:

132

O storyboard ID é um campo String que você pode usar para criar um novo ViewController baseado nesse storyboard ViewController. Um exemplo de uso seria de qualquer ViewController:

//Maybe make a button that when clicked calls this method

- (IBAction)buttonPressed:(id)sender
{
    MyCustomViewController *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"MyViewController"];

   [self presentViewController:vc animated:YES completion:nil];
}

Isso criará um MyCustomViewController baseado no storyboard ViewController que você chamou de "MyViewController" e o apresentará acima do seu View Controller atual

E se você estiver no delegado do seu aplicativo, poderá usar

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard"
                                                         bundle: nil];

Editar: Swift

@IBAction func buttonPressed(sender: AnyObject) {
    let vc = storyboard?.instantiateViewControllerWithIdentifier("MyViewController") as MyCustomViewController
    presentViewController(vc, animated: true, completion: nil)
}

Editar para Swift> = 3:

@IBAction func buttonPressed(sender: Any) {
    let vc = storyboard?.instantiateViewController(withIdentifier: "MyViewController") as! ViewController
    present(vc, animated: true, completion: nil)
}

e

let storyboard = UIStoryboard(name: "MainStoryboard", bundle: nil)
Eric
fonte
Vamos tentar isso e como você consegue oself.storyboard
RTB
self.storyboard pode ser acessado de qualquer viewcontroller. Vou editar minha resposta agora para que você possa ver
Eric
E se necessário para acessá-lo do meu AppDelegate ou de qualquer outra classe?
RTB
Adicionada outra edição mostrando como acessar o storyboard de qualquer arquivo.
Eric
1
self.storyboardpode ser acessado de qualquer controlador de visualização que foi carregado de um storyboard. Se o controlador de visualização não foi carregado de um storyboard, essa propriedade é nula.
rob mayoff
13

Para adicionar a resposta de Eric e atualizá-la para Xcode 8 e Swift 3:

Um storyboard ID faz exatamente o que o nome indica: ele identifica. Apenas que identifica um controlador de visualização em um arquivo de storyboard. É como o storyboard sabe qual view controller é qual.

Agora, não se confunda com o nome. Um storyboard ID não identifica um 'storyboard'. Um storyboard, de acordo com a documentação da Apple, 'representa os controladores de visualização para toda ou parte da interface de usuário do seu aplicativo'. Então, quando você tem algo como a imagem abaixo, você tem um storyboard chamado Main.storyboard que tem dois controladores de visualização, cada um dos quais pode receber um ID de storyboard (seu ID no storyboard).

insira a descrição da imagem aqui

Você pode usar o ID do storyboard de um controlador de visualização para instanciar e retornar esse controlador de visualização. Você pode então manipulá-lo e apresentá-lo como quiser. Para usar o exemplo de Eric, digamos que você queira apresentar um controlador de visualização com o identificador 'MyViewController' quando um botão for pressionado, você faria desta forma:

@IBAction func buttonPressed(sender: Any) {
    // Here is where we create an instance of our view controller. instantiateViewController(withIdentifier:) will create an instance of the view controller every time it is called. That means you could create another instance when another button is pressed, for example.
    let vc = storyboard?.instantiateViewController(withIdentifier: "MyViewController") as! ViewController
    present(vc, animated: true, completion: nil)
}

Observe as alterações na sintaxe.

Taiwosam
fonte
O ícone de aviso amarelo indica que é devido ao fato de que o segundo controlador de visualização não possui ponto de entrada e / ou ID. Isso pode ser resolvido atribuindo a ele um ID de storyboard ou conectando-o a outro controlador de visualização no storyboard. Dessa forma, o storyboard sabe como alcançá-lo e identificá-lo.
Taiwosam de
Não consegui encontrar o campo ID do Storyboard, então obrigado pela imagem. Está na mesma posição no Xcode 9.
Isaac Bosca