- 创建一个手动序列(控制键-从文件所有者处拖动以退出),
- 在绿色退出按钮下方的左侧控制器菜单中选择它。
插入要展开的段的名称。
然后- (void)performSegueWithIdentifier:(NSString *)identifier sender:(id)sender.
用你的身份证。
1) “文件所有者”——这不是一个古老的术语吗?我可以控制从视图控制器到退出图标的拖动。2) 虽然这应该是显而易见的,但Xcode正在iAction的接口中寻找一个声明,该声明包含一个UIStoryboardSegue参数;WWDC 2012 session 407 talk没有提到这一点,也没有将代码粘贴到其中。如果没有它,我的退出图标将不会在控件拖动到它时激活。3) 非常酷的是,在你的红色大箭的末端,在动作区域,你可以点击“go there”箭头!
对于像我这样的人,还在执行这个答案时遇到困难,我在本回购协议中提供了一个更全面的演练和示例:github。com/bradley/IosunwindSegue编程(我不是在宣传自己,我只是在这件事上撞了好几个小时的头,看到工作环境对我有帮助。)
@布拉德利·格里菲斯你真是太棒了。感谢您的精彩演练!
我试了几个小时,甚至翻阅了布拉德利·格里菲斯的例子,但都没用。据我所知,所有设置都与示例项目相同,但我始终会得到SIGABRT-接收器没有带标识符的segue。最后,调用[self DismissionViewControlleranimated:TRUE completion:nil];很有效,而且更容易操作(不需要弄乱故事板)。看到这个了吗-堆栈溢出。com/questions/149577774/…
@布拉德利·格里菲斯我希望你能回答这个问题,这样我也能记下来!你独特的贡献是建立哪个视图控制器得到什么代码.到处都找不到。谢谢
对于仍然对此感到困惑的人来说,关键是iAction需要位于您要返回的视图控制器中,而不是您当前所在的视图控制器中@bradleygriffith在GitHub上详细阐述了这一点,但我在其他任何地方都没有看到这一点。这一部分至关重要。
This这对于将信息传递给“展开”操作非常有用(IBACTION
).
@布拉德利·格里菲斯非常感谢你。我应该大惊小怪的是,我需要在视图控制器类中定义我需要的unwind方法放松到,而不是我们从中返回的视图控制器。
应该是:“2.在(橙色)退出按钮下方的文档大纲菜单上选择它。
以下是目标C和Swift的完整答案:
1) 创建一个IBAction
在目的地视图控制器(您要转到的位置)中展开segue。实现文件中的任何位置。
// Objective C
- (IBAction)unwindToContainerVC:(UIStoryboardSegue *)segue {
}
// Swift
@IBAction func unwindToContainerVC(segue: UIStoryboardSegue) {
}
2) 在源代码视图控制器(您要从中分离的控制器)上,⌃ + 从“活动名称”中拖动以退出。您应该会在弹出窗口中看到在步骤1中创建的展开序列。(如果看不到,请回顾第一步)。从弹出窗口中选择unwindToContainerVC:或任何您命名的方法,将源控制器连接到unwind IBAction。
3) 在源代码视图控制器的故事板文档大纲中选择segue(它将在底部附近列出),并给它一个标识符.
4) 使用此方法从调用unwind segue来源视图控制器,替换你的放松序列名称。
//目标C
[self performSegueWithIdentifier:@"unwindToContainerVC" sender:self];
//斯威夫特
self.performSegueWithIdentifier("unwindToContainerVC", sender: self)
注意。使用unwind方法上segue参数的sourceViewController属性访问源控制器上的任何公开属性。另外,请注意,该框架处理取消源代码控制器的问题。如果您想确认这一点,请向源代码控制器添加一个dealloc方法,其中包含一条日志消息,该消息在被终止后应立即触发。如果dealloc不开火,您可能会有一个保留周期。
我的程序不起作用,甚至连电话都没打(IBAction)unwindToContainerVC:(UIStoryboardSegue *)segue
当您要展开的视图控制器仅存在于情节提要中,即没有自定义的代码实现时,此解决方案不起作用
@mnl不确定你到底在说什么,但它适用于故事板场景或笔尖。如果在代码中创建viewcontroller场景,则不会使用任何以其名称“返回”IB的方法,这实际上是无效的,因为这些方法用于代码和IB之间的通信。这是否解决了您的评论?
你的照片显示ctrl+drag
从…起ViewController
到Exit
非常有帮助。谢谢
对于Swift 4.2使用:self。性能检查(带有标识符:“unwindToVC”,发件人:self)
bradleygriffith
他的回答很好。我采取了第10步,做了一个简化的截图。这是Xcode 6中的屏幕截图。
- 控制从橙色图标拖动到红色退出图标,以创建一个无需在视图中执行任何操作/按钮的放松。
- 然后选择
unwind segue
在侧边栏中:
- 设置序列标识符字符串:
- 从代码中访问该标识符:
[self performSegueWithIdentifier:@"unwindIdentifier" sender:self];
首先,放卷方法必须包含在UIViewController
.那么你的解决方案就行了
你必须为这个新的序列设置标识符!别忘了。
是否可以通过编程方式在源代码视图控制器中创建“退出”连接?
我曾经[self dismissViewControllerAnimated: YES completion: nil];
这会让你回到呼叫中心ViewController
.
拉里,如果你想回到之前的视图控制器,也就是你现在退出的视图控制器,这是一个非常有效的方法。这个问题之所以出现,是因为Xcode 4.5中新增了一个功能,可以从演示顺序中的某个视图控制器“放松”到更早的视图控制器。有关详细信息,请参见WWDC 2012第407次会议。
我发现这是一个合理的问题——我自己也有。您可以通过1以编程方式执行展开顺序。创建一个手动序列(按ctrl键从文件所有者处拖动以退出),2。在IB中给它起个名字,然后是3。在代码中使用标识符:sender:执行正常的性能检查。
IMO不应该关闭。投票关闭此问题的用户似乎没有Obj-C/Cocoa Touch背景。
杨:你怎么给它取个名字?
我只使用[self DismissionViewControlleranimated:YES completion:nil];以编程方式退出。我不知道这是不是一个正确的方式。
DismissViewControllerInitiated:完成:应发送给呈现要解除的控制器(呈现控制器)的控制器(呈现控制器)。如果消息被发送到一个被拒绝的人,它只是被转发到呈现控制器。但主讲人必须知道它被驳回了。因此,呈现的控制器要么通过委托(在iOS5中)通知它,要么通过展开序列(在iOS6中可用)通知它。
sarfata:首先通过ctrl键将viewcontroller拖动到“Exit”来创建“手动展开序列”。然后你可以在文档大纲中找到这个段落。
这个问题给出了很好的答案在这里愿这对你有更多帮助:)
当它是一段时,我不明白这一点,它意味着有一个故事板,它不再是“程序性的”。