14.2_使用dismiss方法关闭模态视图
关闭模态视图的核心方法
当你使用 present 方法展示了一个模态视图控制器后,关闭它同样简单直观。核心在于使用 dismiss(animated:completion:) 方法。这个方法是 UIViewController 的一个实例方法,意味着任何视图控制器都可以调用它来关闭由它自己或其子视图控制器呈现的模态视图。这真是太棒了!✨
谁来调用 dismiss?
一个常见的误解是,只有呈现者(presenting view controller)才能关闭被呈现者(presented view controller)。实际上,被呈现的视图控制器完全有能力自行关闭。例如,你可以在模态视图控制器内部添加一个“完成”或“取消”按钮,当用户点击时,该视图控制器就可以调用 self.dismiss(...) 来关闭自己。这赋予了你极大的灵活性!
dismiss 方法详解
dismiss 方法有两个关键参数:
animated: Bool:这个参数决定了关闭过程是否以动画形式呈现。设置为true会有一个平滑的过渡效果,通常是从屏幕顶部滑出或淡出,这能提供更好的用户体验。设置为false则会立即关闭,没有动画。completion: (() -> Void)?:这是一个可选的闭包,当模态视图控制器完全关闭并且动画(如果animated为true)结束后,这个闭包会被执行。你可以在这里执行一些清理工作,或者更新呈现者视图控制器的数据。
例如,你可以在一个按钮的 IBAction 中这样调用:
swift
@objc func closeButtonTapped() {
self.dismiss(animated: true) {
print("模态视图已关闭!")
// 可以在这里执行一些后续操作
}
}实际应用场景
想象一下,你正在开发一个照片编辑应用。当用户点击“编辑”按钮时,你会模态呈现一个照片编辑界面。在这个编辑界面中,用户可以裁剪、调整颜色等。当用户完成编辑并点击“保存”或“取消”时,编辑界面就需要关闭。
- 保存操作:用户点击“保存”后,编辑界面会调用
dismiss关闭自己,并在completion闭包中通知呈现者视图控制器更新照片。 - 取消操作:用户点击“取消”后,编辑界面同样调用
dismiss关闭自己,但可能不需要在completion闭包中执行任何数据更新。
这种模式非常高效,确保了视图控制器之间的职责分离。
最佳实践与注意事项
为了提供最佳的用户体验,有几个小贴士可以帮助你:
- 始终考虑动画:在大多数情况下,使用
animated: true会让你的应用看起来更流畅、更专业。用户会喜欢这种平滑的过渡效果。 - 利用
completion闭包:不要小看completion闭包的强大功能。它是你在模态视图关闭后执行必要逻辑的完美场所,比如刷新数据、释放资源等。 - 避免循环引用:在
completion闭包中使用[weak self]或[unowned self]来捕获self,以防止潜在的循环引用,这对于内存管理至关重要。
通过熟练掌握 dismiss 方法,你将能够轻松地管理模态视图的生命周期,为用户提供无缝且直观的交互体验。继续加油,你一定能成为 UIKit 大师!🚀