Ahm*_*mad 12 uiviewcontroller ios swift
我有两个视图控制器,MainVC和ModalVC.
当用户点击按钮时MainVC,会出现模态视图控制器.
然后,用户可以点击另一个按钮来关闭它并返回到主按钮.
我尝试了这两种方法,它们都完成了同样的事情:它们解雇了模态视图控制器:
//method 1:
// File: ModalVC.swift
//
@IBAction func dismissTapped() {
self.dismissViewControllerAnimated(false, completion: nil);
}
Run Code Online (Sandbox Code Playgroud)
正如我所说,这很好用,但考虑另一种方法:使用委托让主控制器解雇:
// method 2: part A
// File: ModalVC.swift
//
protocol ModalVCDelegate {
func modalVCDismissTapped();
}
...
...
...
var delegat:ModalVCDelegate? = nil;
...
...
@IBAction func dismissTapped() {
delegate.modalVCDismissTapped();
}
Run Code Online (Sandbox Code Playgroud)
并在主视图控制器上自定义类文件:
// method 2: part B
// File: MainVC.swift
class MainVC : UIViewController, ModalVCDelegate {
...
...
func modalVCDismissTapped() {
self.dismissViewControllerAnimated(false, completion: nil);
}
}
Run Code Online (Sandbox Code Playgroud)
由于这两种方法是必要的,我应该担心任何可能的内存泄漏吗?
任何解释都会有帮助
Mod*_*her 16
使用委托是解除视图控制器的最佳和更灵活的方法.
它的目的是在你的代码的某些未来或其他地方你可以重用这个VC,但由于某些原因,你可能不会将它呈现为模态,而是推入导航堆栈.所以你ModalVC不知道它是如何呈现的,但代表确实如此.
在这种情况下,您的代码中可以有2个位置
你提出模态和委托调用
[self dismiss...]
Run Code Online (Sandbox Code Playgroud)您将其推入导航堆栈并委派调用
[self.navigationController popView...]
Run Code Online (Sandbox Code Playgroud)您将其添加为子VC并委派调用
[someParentVC removeChild..]
Run Code Online (Sandbox Code Playgroud)
或任何其他适当的工作流程来删除它.
| 归档时间: |
|
| 查看次数: |
8070 次 |
| 最近记录: |