我有2个UIViewControllers
包含表:A
和B
。在A的表中轻按一行以选择B。
在A
和B
的每个视图的底部,我都有一个ContainerView
,它指向相同的UIViewController
,例如Z
。我使用Z
来显示横幅广告。我遇到的问题是,每当我的视图更改(从A
到B
或B
到C
)时,UIViewController
Z
都会重新实例化。但是,这不是我想要的。我想在所有地方使用ContainerView的相同实例。我的广告横幅确实保持静态,因此它们到处都是一样的,但是仍然在管理方向更改和横幅视图变得混乱。当切换容器视图实例时,它也使广告横幅消失并在我切换视图时重新出现。
有没有一种方法可以在我的所有UIViewControllers ContainerView
和A
以及我添加的任何其他viewcontrollers中保留整个B
的相同实例?
最佳答案
有两种方法可以完成此任务。
第一种方法:意识到应该是容器中的A,B和C视图控制器,而不是横幅添加视图控制器。 (可选)使用两个容器制作一个父视图控制器-一个用于横幅广告,另一个用于A,B和C控制器。
第二种方法:当segueing从A到B到C,简单地传递该视图沿控制器。您可以通过给他们全部一个共同的父母来极大地简化这一过程。
class BannerViewController { /* blah */ }
class BannerViewDisplayViewController {
@IBOutlet var bannerView: UIView!
var bannerViewController: BannerViewController! {
didSet {
bannerView = bannerViewController.view
bannerViewController.didMoveToParentViewController(self)
}
}
override func viewDidLoad() {
super.viewDidLoad()
if bannerViewController == nil {
// instantiate a bannerViewController
}
}
override func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!) {
if let destination = segue.destinationViewController as? BannerViewDisplayViewController {
destination. bannerViewController = self. bannerViewController
}
}
}
关于swift - 静态ContainerView,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31370755/