Em poucas palavras
Um segue de desenrolamento (às vezes chamado de segue de saída ) pode ser usado para navegar de volta através de seguimentos push, modal ou popover (como se você tivesse retirado o item de navegação da barra de navegação, fechou o popover ou dispensou o controlador de exibição apresentado modalmente). Além disso, você pode realmente relaxar não apenas uma, mas uma série de seguimentos push / modal / popover, por exemplo, "voltar" várias etapas na hierarquia de navegação com uma única ação de relaxamento.
Ao executar uma sequência de desenrolamento, é necessário especificar uma ação, que é um método de ação do controlador de exibição em que você deseja descontrair.
Objetivo-C:
- (IBAction)unwindToThisViewController:(UIStoryboardSegue *)unwindSegue
{
}
Rápido:
@IBAction func unwindToThisViewController(segue: UIStoryboardSegue) {
}
O nome desse método de ação é usado quando você cria as etapas de desenrolamento no storyboard. Além disso, esse método é chamado pouco antes da execução do desenrolamento. Você pode fazer com que o controlador de visualização de origem, a partir do UIStoryboardSegue
parâmetro passado, interaja com o controlador de visualização que iniciou o segue (por exemplo, para obter os valores de propriedade de um controlador de visualização modal). A este respeito, o método tem uma função semelhante ao prepareForSegue:
método de UIViewController
.
Atualização do iOS 8: os desenrolamentos de desenrolamento também funcionam com os adaptativos do iOS 8, como Mostrar e Mostrar detalhes .
Um exemplo
Vamos criar um storyboard com um controlador de navegação e três controladores de exibição filho:
No Green View Controller, você pode relaxar (navegar de volta) para o Red View Controller. Do azul, você pode relaxar para verde ou vermelho via verde. Para ativar o desenrolamento, você deve adicionar os métodos de ação especiais a Vermelho e Verde, por exemplo, aqui está o método de ação em Vermelho:
Objetivo-C:
@implementation RedViewController
- (IBAction)unwindToRed:(UIStoryboardSegue *)unwindSegue
{
}
@end
Rápido:
@IBAction func unwindToRed(segue: UIStoryboardSegue) {
}
Após a adição do método de ação, você pode definir as etapas de desenrolamento no storyboard arrastando a tecla Control até o ícone Sair. Aqui, queremos desanuviar do vermelho para o verde quando o botão é pressionado:
Você deve selecionar a ação que é definida no controlador de exibição que deseja descontrair:
Você também pode relaxar com o Red from Blue (que fica a "dois passos" na pilha de navegação). A chave é selecionar a ação de desenrolar correta.
Antes da execução do desenrolamento, o método de ação é chamado. No exemplo, eu defini um desenrolar segue para vermelho de verde e azul. Podemos acessar a fonte do desenrolar no método de ação através do parâmetro UIStoryboardSegue:
Objetivo-C:
- (IBAction)unwindToRed:(UIStoryboardSegue *)unwindSegue
{
UIViewController* sourceViewController = unwindSegue.sourceViewController;
if ([sourceViewController isKindOfClass:[BlueViewController class]])
{
NSLog(@"Coming from BLUE!");
}
else if ([sourceViewController isKindOfClass:[GreenViewController class]])
{
NSLog(@"Coming from GREEN!");
}
}
Rápido:
@IBAction func unwindToRed(unwindSegue: UIStoryboardSegue) {
if let blueViewController = unwindSegue.sourceViewController as? BlueViewController {
println("Coming from BLUE")
}
else if let redViewController = unwindSegue.sourceViewController as? RedViewController {
println("Coming from RED")
}
}
Desenrolar também funciona através de uma combinação de push / modal segues. Por exemplo, se eu adicionasse outro controlador de exibição Yellow com um segue modal, poderíamos relaxar do Yellow até o Red em uma única etapa:
Desenrolando do Código
Quando você define um segue de desenrolar ao arrastar algo para o símbolo Exit de um controlador de exibição, um novo segue aparece no Esboço do documento:
Selecionar as instruções e ir para o Inspetor de atributos revela a propriedade "Identificador". Use isso para fornecer um identificador exclusivo para seus seguimentos:
Depois disso, os passos descontraídos podem ser executados a partir do código, como qualquer outro segue:
Objetivo-C:
[self performSegueWithIdentifier:@"UnwindToRedSegueID" sender:self];
Rápido:
performSegueWithIdentifier("UnwindToRedSegueID", sender: self)
dismissViewControllerAnimated:completion:
oupopViewControllerAnimated:
alcançar a mesma coisa?