静态ContainerView

时间:2015-07-12 17:47:40

标签: swift uiviewcontroller container-view

我有2个UIViewControllers,其中包含表:AB
在表格中点击A中的一行到B。

AB的每个视图的底部,我有一个ContainerView,指向相同的UIViewControllerZ。我使用Z来展示横幅广告。我遇到的问题是,每次我的观看次数发生变化时(从ABB再到C),UIViewController Z都会重新开始 - 实例化它应该。但这是我不想要的。我想在任何地方使用相同的ContainerView实例。我确实让我的广告横幅保持静止,所以它们在各处都是一样的,但仍然管理方向变化和横幅视图变得混乱。此外,当我切换视图时,广告横幅消失并重新出现,因为容器视图实例已切换。

有没有办法可以在我的所有UIViewControllers ContainerViewA以及我添加的任何其他视图控制器中保留整个B的相同实例?

1 个答案:

答案 0 :(得分:1)

有两种方法可以完成这项任务。

第一种方法:意识到它是你的A,B和& C视图控制器应该在容器中而不是横幅添加视图控制器。可选地,制作具有两个容器的父视图控制器 - 一个用于横幅广告,另一个用于A,B和& C控制器。

第二种方法:当从A到B从C切换到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
        }
    }
}