Alguém sabe para que o novo ícone Exit é usado ao editar storyboards usando o Xcode 4.5?

100

Clicar com o botão direito no ícone Sair exibe uma janela vazia. Não é possível arrastar com a tecla Ctrl pressionada uma conexão com nenhum elemento IB ou arquivos de origem correspondentes. Os documentos não dão amor. Não aparece em arquivos nib, apenas storyboards. Minha suposição é que é um corolário de segues, mas não vejo nenhum método novo para fazer o backup. Qualquer um?

rsswtmr
fonte
Possível duplicata do Storyboard
Tamás Sengel

Respostas:

104

Há muitas informações no vídeo WWDC "Sessão 407 - Adotando Storyboards em seu aplicativo".

Digamos que você tenha dois controladores de visualização vinculados por uma segue. Implemente a seguinte ação de saída no primeiro controlador de visualização:

- (IBAction)done:(UIStoryboardSegue *)segue {
    NSLog(@"Popping back to this view controller!");
    // reset UI elements etc here
}

Em seguida, na cena do Storyboard para o segundo controlador de visualização, pressione Ctrl e arraste de um elemento da IU, como um botão, para o ícone de saída na parte inferior deste controlador de visualização. A done:ação que você adicionou ao código do primeiro controlador aparecerá como uma opção. Agora, ativar o botão que você arrastou com a tecla Ctrl pressionada até o ícone de saída retornará ao primeiro controlador de visualização e manterá seu estado original (ou seja, elementos da IU, como entrada de texto supostamente ainda intactos).

Cal S
fonte
3
Na verdade, ele volta para a mesma instância exata do controlador de visualização (e suas visualizações).
Jon Hess
Obrigado, eu estava lendo isso apenas para saber do que se tratava a "Saída Verde", apenas para descobrir que resolveu um problema para mim. Eu tinha 2 controladores de visualização separados por um controlador TabBar e um controlador de navegação, e "Pop" não funcionou para retornar. Demorou 2 minutos e tudo funcionou como você disse! OBRIGADO!
user589642
Como posso invocar o método de ação no Donebotão na classe de visão B antes de sair de volta para a visão A?
especialista em
Se você assistir ao vídeo da WWDC, pode pular para 37:15 para ver a parte sobre "continuações para descontrair"
moliveira
220

Tive dificuldade em seguir a resposta aceita, então aqui estão mais detalhes.

Dada a foto abaixo no controlador de visualização C, você pode "sair" de volta para qualquer controlador de visualização no caminho segue.

insira a descrição da imagem aqui

ViewController A você pode escrever:

- (IBAction)done:(UIStoryboardSegue *)segue {
    // Optional place to read data from closing controller
}

ViewController B, você pode escrever:

- (IBAction)back:(UIStoryboardSegue *)segue {
    // Optional place to read data from closing controller
}

ViewController C você controla o arrasto do botão "voltar" para a opção de saída verde e seleciona voltar: ViewController C você controla o arrasto do botão "concluído" para a opção de saída verde e seleciona concluído: insira a descrição da imagem aqui

Nota: Mesmo que os métodos estão em outros controladores de vista que eles aparecem para o ViewController C saída 's. O controle de arrastar e selecionar um método define para qual ViewController se desenrolar.

Eric
fonte
2
Mais uma nota: às vezes, o botão de saída verde não está ativo mesmo que todas as etapas sejam concluídas. Nesse caso, a reabertura do storyboard (ou projeto xcode) faz com que ele funcione conforme o esperado.
zxcat
3
Outro problema que tive foi que não coloquei a assinatura do método segue de desenrolamento no meu arquivo .h ou extensão de classe. Depois de adicioná-lo, a janela de abertura apareceu no pop-up.
Steve Moser
2
+ Infinity paraEven though the methods are on other view controllers they show up for the ViewController C's exit.
Papai Noel
15

Além da resposta de Eric, aqui está como funciona com:

A função que você adiciona ao controlador de destino se parece com:

@IBAction func backFromOtherController(segue: UIStoryboardSegue) {
    NSLog("I'm back from other controller!")
}
jboi
fonte