背景信息:我有两个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
}
问题:现在,在其中一个辅助VC(例如D)中,事情有点特殊。在这个VC中,我以编程方式通过循环生成几百个按钮,然后检测正在按下哪个按钮,最后展开回VC A(没有特定按钮;任何按钮都会触发展开)。我知道我可以这样做,例如使用这个
[self dismissViewControllerAnimated: YES completion: nil]
但是当返回VC A或使用此
时,这不会触发上述操作[self performSegueWithIdentifier:@"UnwindSegueIdentifier" sender:self]
但是这将生成VC A的新实例,我不想要(因为VC A实例中的标签已经包含一些信息)。
所以,我想要的是能够返回生成VC D的VC A的同一个实例,并触发上面列出的“返回”操作。因此,我希望获得与使用连接到“exit”图标的按钮时相同的效果,但是当按下VC D中的许多按钮时,我想以编程方式“在代码内”执行此操作。
有什么想法?
答案 0 :(得分:6)
[self performSegueWithIdentifier:@"UnwindSegueIdentifier" sender:self]
应该可以正常工作。放松segues不会创建目的地的新实例,无论它们如何执行。它们的独特之处在于它是唯一不会创建目标新实例的segue。
答案 1 :(得分:1)
您可以通过控制+从场景的视图控制器图标拖动到其退出图标来以编程方式创建unwindsegue。在为此unwindseque分配标识符后,您可以通过编程方式调用它。
参考: https://developer.apple.com/library/ios/technotes/tn2298/_index.html
答案 2 :(得分:0)
Ulas已正确理解并回答了这个问题。原始海报希望确保放松'(IBAction)myCustomName:(UIStoryboardSegue *)segue'选择器在放松时被调用,而不必手动'将按钮链接到展开segue。为了强调这一点,假设您在运行时基于某些条件以编程方式创建按钮。您无法手动将该按钮连接到展开segue。你需要在VC B中做这样的事情......
UIBarButtonItem *dynamicButton = [[UIBarButtonItem alloc]
initWithTitle:@"Cool"
style:UIBarButtonItemStyleBordered
target:self
action:@selector(killView)];
self.navigationItem.leftBarButtonItem = dynamicButton;
- (void) killView
{
[self performSegueWithIdentifier:@"TEST" sender:self];
}
' TEST' segue是从 VC B手动建立退出(即视图控制器本身不是按钮)。单击该按钮时,它将调用killView方法,并通过标识符触发segue。