【发布时间】:2012-02-21 17:22:55
【问题描述】:
使用情节提要,关闭模式的正确方法是什么?
- 使用 IBAction 并编写代码在单击按钮后关闭?
- 使用 segue 并在单击按钮后通知父视图控制器?
【问题讨论】:
标签: ios storyboard modal-dialog
使用情节提要,关闭模式的正确方法是什么?
【问题讨论】:
标签: ios storyboard modal-dialog
看到这里Dismissing a Presented View Controller 大约一半
当需要关闭呈现的视图控制器时,首选方法是让呈现的视图控制器关闭它。
因此,您应该使用 IBAction 并编写代码在单击按钮后关闭
【讨论】:
根据 Alex Cio 对 Swift 3 和 XCode 8.3 的回答:
创建类:
import UIKit
class DismissSegue: UIStoryboardSegue {
override func perform() {
self.source.presentingViewController?.dismiss(animated: true, completion: nil)
}
}
但在故事板中你应该选择:
Action Segue -> 自定义 -> 关闭
只有在此选项出现在Action Segue 菜单上之后
【讨论】:
我发现通常当我尝试在情节提要中执行此操作时,我宁愿不创建额外的类。从呈现视图控制器执行关闭仍然有意义,因此需要一个类来支持它。
如果您在呈现视图控制器中创建 IBAction 并适当命名,例如
- (IBAction)dismissAnyModel:(id)sender
{
[self dismissViewControllerAnimated:YES completion:nil];
}
然后从情节提要中您想要触发解雇的任何地方创建一个到第一响应者的操作,如下所示。您可以通过为 IBAction 创建唯一名称来扩展它以使用多个呈现视图控制器。
【讨论】:
查看我的回答here。它为您提供了两种方法来关闭带有情节提要的模态视图控制器。我喜欢所描述的方法二,因为您在项目中添加了一个类,您从模态视图返回可以在没有代码的情况下单独使用情节提要完成。也就是说,如果你已经实现了一个委托和委托协议,那么它也是放置dismissModalViewController语句的好地方。
【讨论】:
要在UIStoryboard 中执行此操作,您首先需要在项目中创建UIStoryboardSegue 类型的对象
然后在类中插入以下方法。这是我的课
@implementation DismissController
- (void)perform{
UIViewController *sourceVC = self.sourceViewController;
[sourceVC.presentingViewController dismissViewControllerAnimated:YES
completion:nil];
}
现在您可以在UIStoryboard 中使用它。选择应该使UIViewController 消失的按钮并将其拖动到您要前往的UIViewController。就我而言,它显示 **dismiss Controller* 因为我的班级名称。
选择它,你就完成了! 还有一个很好的解释on this website.
【讨论】:
正如 Apple 在线文档所示,呈现视图控制器负责关闭模态(呈现)视图。
有一个帖子和示例可用 here
【讨论】: