'Saída' do Storyboard do Xcode 4.5


102

Acabei de instalar o Xcode 4.5 para suporte a iOS6 e vi um novo ícone chamado 'Exit' em meu Storyboard, listado em meus controladores de visualização junto com 'First Responder' etc. Um pequeno ícone verde rotulado 'Exit'.

Não consigo encontrar nada nele nem descobrir como pode ser usado.

Alguém sabe alguma coisa sobre isso, como funciona, para que serve?


1
Em uma pergunta semelhante, postei esta resposta: stackoverflow.com/questions/12569316/… Isso ajuda a explicar como usar o recurso de saída (desenrolar)
Eric

Respostas:


72

Isso é chamado de " Unwind Segue ". Infelizmente não há documentação para isso até agora, exceto uma breve menção na lista de novos recursos do XCode 4.5 que afirma:

Unwind segues pode permitir a transição para instâncias existentes de cenas em um storyboard

A boa notícia é que há uma sessão da WWDC 2012 explicando essas criaturas (entre outras coisas).

Você pode simplesmente fazer login no iOS Dev Center da Apple com os detalhes da sua conta de desenvolvedor e, em seguida, ir para a página de vídeos WWDC 2012 e assistir "Adotando Storyboard em seu aplicativo" (é o quinto a partir do topo). .


Atualização: Aqui estão mais algumas informações sobre o assunto da documentação da Apple

Um objeto de espaço reservado denominado Exit para desenrolar seques. Por padrão, quando um usuário descarta uma cena infantil, o controlador de visualização para aquela cena se desenrola (ou retorna) para a cena pai - que é a cena que originalmente fez a transição para a cena infantil. No entanto, o objeto Exit permite que um controlador de visualização se desenrole em uma cena arbitrária.

(Do iOS6 docset> Geral> Primeiros passos)

E aqui está um bom exemplo de como você pode implementar um


Outra atualização:

Aqui está uma nota técnica da Apple sobre este tópico.


3
OK, então como você usa isso? Tentei clicar com o botão direito do mouse no objeto de saída na parte inferior de um viewcontroller, mas não ligou a nada.
shim de

4
Basicamente, você tem que definir um método para a sua segue de desenrolamento e, em seguida, conectar a partir de um elemento ao exitbotão, selecionando o método que deseja chamar. Você pode encontrar um exemplo aqui (também atualizei minha resposta para incluir o exemplo)
Alladinian,

1
-1: Muitas palavras, pouca informação útil. Depois de ler sobre isso e utilizá-lo em meu próprio aplicativo, escrevi esta resposta que espero ser mais útil: stackoverflow.com/a/25829835/901641
ArtOfWarfare

1
É por isso que adoro documentações inexistentes da Apple. Cara, alguém deveria ser demitido lá.
Duck

@SpaceDog Talvez seja isso o que aconteceu, todos eles foram demitidos e ninguém sobrou para escrever a documentação: / Eu amo o vídeo WWDC - 2012 é aparentemente o ano em que a Apple atingiu o pico.
testado em

10

Imagine que você tem uma sequência de visualizações em seu storyboard:

A -> ... -> Z

Você deseja ter um botão à vista Zque permita ao usuário voltar até A.

Portanto, o que você precisa fazer é fornecer a visualização que deseja retornar, neste caso A, um método de instância que está marcado como a IBActione recebe um único parâmetro do tipo UIStoryboardSegue *. O nome do método e da variável não importa. O que você faz na implementação também não importa. Aqui está um exemplo:

Obj-C:
Na A's de interface (não Z' s):

- (IBAction)cancelSignup:(UIStoryboardSegue *)unwindSegue;

Na Aimplementação de (não Z):

- (IBAction)cancelSignup:(UIStoryboardSegue *)unwindSegue {
    // Only "implemented" to satisfy a respondsToSelector: search.
    // You can actually implement more stuff here, if you want, IE, if
    // you need to reach out to a server to mention that this screen was
    // returned to from a later screen.
}

Swift: Fonte de
In A(não Z):

@IBAction func cancelSignup(unwindSegue: UIStoryboardSegue) {
    // Only "implemented" to satisfy a respondsToSelector: search.
    // You can actually implement more stuff here, if you want, IE, if
    // you need to reach out to a server to mention that this screen was
    // returned to from a later screen.
}

Agora, dentro do seu storyboard, controlarraste de um elemento Z(ou seja, um botão cancelar) para Z's Exit. Ele percorrerá todas as visualizações no topo da hierarquia de visualizações que possuem um IBActionque aceita apenas uma única UIStoryboardSegue *como uma ação e as relaciona para você escolher.

Esperançosamente, isso foi mais direto e útil do que as respostas existentes. Descobri que este link foi particularmente útil, então se houver um detalhe no qual você ainda está confuso depois de ler minha resposta, talvez isso possa ajudá-lo (eu tentei apenas condensar todas as informações úteis deste longo artigo em uma resposta curta): http://www.freelancemadscience.com/fmslabs_blog/2012/9/24/advanced-storyboard-techniques.html


4

Consulte também Não é possível conectar o segmento de desenrolar do storyboard, que esclarece os requisitos para dar vida ao ícone Sair. Você deve ter, em um nível mais alto na hierarquia do controlador de visualização, um método que seja:

  1. Marcado como IBAction

  2. Toma um parâmetro que é um UIStoryboardSegue *

Se ambas as condições forem atendidas, o ícone Exit o verá e permitirá que você se conecte a ele arrastando e controlando de um botão no mesmo controlador de visualização.

Agora também postei o exemplo mais simples do mundo aqui:

https://github.com/mattneub/Programming-iOS-Book-Examples/tree/master/ch19p638presentedViewControllerStoryboard (corrigido em 12 de julho de 2013)

Isso mostra como é trivialmente fácil seguir e voltar de um controlador de visualização apresentado, ao contrário de todo o trabalho que você teve que fazer anteriormente para passar informações para frente e para trás (as coisas no modelo com um delegado e um protocolo , agora todos podem ser excluídos).


3

Basta adicionar uma ligeira sutileza à definição de requisitos que pode ajudar. Isso se baseia em experiências no Xcode 4.6. Descobri que é especificamente e apenas a declaração (!) Do método que permite a resposta desejada de controle e arrasto do Xcode. Aqui estão os requisitos completos:

  • Marcado como IBAction
  • Pega um parâmetro que é um UIStoryboardSegue*
  • Você deve ter uma ação declarada (mas não necessariamente implementada [significando um método na .Mseção de implementação]).
  • Pode estar na declaração de interface de qualquer classe, até mesmo na seção de interface de a .M, exceto a classe appdelegate. (Não vi nenhuma dependência de sua posição na hierarquia do controlador. Você pode adicionar qualquer arquivo antigo e o sistema parece agregar todos os métodos que possuem o UIStoryboardSegueparâmetro e exibi-los no menu do ícone Sair.) Observe que o controle e arrastar menu irá até mostrar seu método se o método estiver na classe da cena que você está manipulando no editor de storyboard, mas aparecerá sem dois pontos e não parece acionar nenhuma ação em tempo de execução.

Exemplo: -(IBAction)anymethodname:(UIStoryboardSegue *)myvariable;

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.