我有这些自定义的UIViewController,LoadingViewController和LoadableViewController,并且LoadableViewController需要在startLoading函数上显示LoadingViewController或在stopLoading函数上将其关闭。我的尝试如下,但我不确定如何在初始化程序中声明用于loadViewController的变量,因为该变量已在情节提要中定义,将由情节提要分配,并且我不想无故重复分配(意思是在init中添加一个loadingViewController = LoadingViewController())。
import UIKit
class LoadableViewController: UIViewController {
var loadingViewController: LoadingViewController
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
override func viewDidAppear(animated: Bool) {
loadingViewController = storyboard?.instantiateViewControllerWithIdentifier("LoadingiewController") as! LoadingViewController
}
func stopLoading() {
loadingViewController.dismissViewControllerAnimated(true, completion: nil)
}
func startLoading() {
presentViewController(loadingViewController, animated: true, completion: nil)
}
}
最佳答案
对我来说一切都很好。不应有双重分配,因为每次出现该视图时,您都将覆盖以前的self.loadingViewController
分配,并且ARC将垃圾回收旧值。
不需要self.loadingViewController = LoadingViewController()
,因为此实例将不了解您使用情节提要中的IBOutlet
创建的界面。使用instantiateViewControllerWithIdentifier
时,将使用您在Interface Builder中将此类与之关联的UI元素创建LoadingViewController
的实例。