使用情节提要时关闭模式的正确方法是啥?
Posted
技术标签:
【中文标题】使用情节提要时关闭模式的正确方法是啥?【英文标题】:What is the proper way to dismiss a modal when using storyboards?使用情节提要时关闭模式的正确方法是什么? 【发布时间】:2012-02-21 17:22:55 【问题描述】:使用情节提要,关闭模式的正确方法是什么?
使用 IBAction 并编写代码在单击按钮后关闭? 使用 segue 并在单击按钮后通知父视图控制器?【问题讨论】:
【参考方案1】:看到这里Dismissing a Presented View Controller 大约一半
当需要关闭呈现的视图控制器时,首选方法是让呈现的视图控制器关闭它。
因此,您应该使用 IBAction 并编写代码在单击按钮后关闭
【讨论】:
“所以你应该使用 IBAction 并编写代码在单击按钮后关闭”实际上是错误的。 Apple 的意思是“你需要通知 PARENT 视图控制器,然后它会关闭模式。” 现在链接坏了 我做了一个分类:) github.com/evanstoddard/UIViewController-Dismiss-Actions【参考方案2】:根据 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
菜单上之后
【讨论】:
【参考方案3】:我发现通常当我尝试在情节提要中执行此操作时,我宁愿不创建额外的类。从呈现视图控制器执行关闭仍然有意义,因此需要一个类来支持它。
如果您在呈现视图控制器中创建 IBAction 并适当命名,例如
- (IBAction)dismissAnyModel:(id)sender
[self dismissViewControllerAnimated:YES completion:nil];
然后从情节提要中您想要触发解雇的任何地方创建一个到第一响应者的操作,如下所示。您可以通过为 IBAction 创建唯一名称来扩展它以使用多个呈现视图控制器。
More information on first responder and the responder chain
【讨论】:
【参考方案4】:查看我的回答here。它为您提供了两种方法来关闭带有情节提要的模态视图控制器。我喜欢所描述的方法二,因为您在项目中添加了一个类,您从模态视图返回可以在没有代码的情况下单独使用情节提要完成。也就是说,如果你已经实现了一个委托和委托协议,那么它也是放置dismissModalViewController语句的好地方。
【讨论】:
【参考方案5】:要在UIStoryboard
中执行此操作,您首先需要在项目中创建UIStoryboardSegue
类型的对象
然后在类中插入以下方法。这是我的课
@implementation DismissController
- (void)perform
UIViewController *sourceVC = self.sourceViewController;
[sourceVC.presentingViewController dismissViewControllerAnimated:YES
completion:nil];
现在您可以在UIStoryboard
中使用它。选择应该使UIViewController
消失的按钮并将其拖动到您要前往的UIViewController
。就我而言,它显示 **dismiss Controller* 因为我的班级名称。
选择它,你就完成了! 还有一个很好的解释on this website.
【讨论】:
【参考方案6】:正如 Apple 在线文档所示,呈现视图控制器负责关闭模态(呈现)视图。
有一个帖子和示例可用 here
【讨论】:
链接已过时。这就是为什么你不应该在没有先发布一些示例代码的情况下发布链接来回答。以上是关于使用情节提要时关闭模式的正确方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章
在使用情节提要时不确定如何正确继承 UIApplication
使用 UIViewControllerRepresentable 时 UIViewController 子视图的大小/布局不正确(没有情节提要)