以编程方式解开Segue - 新的转折

Mr *_*kei 2 cocoa-touch ios segue

背景:我有两个VC,A和B. VC A包含几个按钮和几个标签.当按下VC A中的按钮时,segue将显示VC B/C /等等.现在,当完成VC A/B/C时,segue正在展开,以便出现VC A. 对于大多数VC B/C/D等,我使用unwind方法,我通过该VC中的按钮触发(ctrl +拖动到"退出"图标).这很有效,因为在返回VC A时,会自动调用以下操作:

- (IBAction)returned:(UIStoryboardSegue *)segue {
// Here I do some stuff 
}
Run Code Online (Sandbox Code Playgroud)

问题:现在,在其中一个辅助VC(例如D)中,事情有点特殊.在这个VC中,我以编程方式通过循环生成几百个按钮,然后检测正在按下哪个按钮,最后展开回VC A(没有特定按钮;任何按钮都会触发展开).我知道我可以这样做,例如使用它

[self dismissViewControllerAnimated: YES completion: nil]
Run Code Online (Sandbox Code Playgroud)

但是当返回VC A或使用此操作时,这不会触发上述操作

[self performSegueWithIdentifier:@"UnwindSegueIdentifier" sender:self]
Run Code Online (Sandbox Code Playgroud)

但是这将生成VC A的新实例,我不想要(因为VC A实例中的标签已经包含一些信息).

所以,我想要的是能够返回生成VC D的VC A的同一个实例,并触发上面列出的"返回"操作.因此,我希望获得与使用连接到"exit"图标的按钮时相同的效果,但是当按下VC D中的许多按钮时,我想以编程方式"在代码内"执行此操作.

有什么想法吗?

Sco*_*ets 6

[self performSegueWithIdentifier:@"UnwindSegueIdentifier" sender:self]应该工作得很好.放松segues不会创建目的地的新实例,无论它们如何执行.它们的独特之处在于它是唯一不会创建目标新实例的segue.

  • @MrEmkei我指的是这种技术:http://stackoverflow.com/a/17607083/1271826.展开动作方法在A的视图控制器中定义,展开segue在D的IB场景中定义.如果你有一个segue你从D的场景画到了IB的A场景,那不是一个放松的区别. (4认同)
  • +1非常正确.唯一的"技巧"是如何在故事板中创建展开segue(您必须控制 - 从场景下方的栏中的视图控制器图标拖动到插座图标),但这种技术效果很好. (2认同)