以程序方式展开Segue-新的转折点



上下文:我有两个VC,A和B。VC A包含几个按钮和几个标签。当按下VC A中的按钮时,一段将显示VC B/C/,依此类推。现在,当完成VC A/B/C等操作时,段正在展开,从而出现VC A。对于大多数VC B/C/D等,我使用的是通过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的同一个实例,并触发上面列出的"返回"操作。因此,我想实现与使用连接到"退出"图标的按钮时相同的效果,但我想在按下VC D中的多个按钮中的一个时以编程方式"在代码内部"实现这一点。

有什么想法吗?

[self performSegueWithIdentifier:@"UnwindSegueIdentifier" sender:self]应该可以正常工作。展开分段不会创建其目的地的新实例,无论它们是如何执行的。它们的独特之处在于,它是唯一一个不创建目的地新实例的segue。

您可以通过控制+从场景的视图控制器图标拖动到其退出图标来创建一个Unundsegue以编程方式使用。将标识符分配给这个Unundeque之后,您可以通过编程方式调用它。

参考:https://developer.apple.com/library/ios/technotes/tn2298/_index.html

Ulas正确理解并回答了这个问题。最初的海报希望确保在展开时调用展开"(IBAction)myCustomName:(UIStoryboardSegue*)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"段是从VC B手动建立到退出的(即视图控制器本身不是按钮)。当单击该按钮时,它会调用killView方法,并通过标识符触发segue。

最新更新