我有2个UIViewControllers包含表:AB。在A的表中轻按一行以选择B。

AB的每个视图的底部,我都有一个ContainerView,它指向相同的UIViewController,例如Z。我使用Z来显示横幅广告。我遇到的问题是,每当我的视图更改(从ABBC)时,UIViewController Z都会重新实例化。但是,这不是我想要的。我想在所有地方使用ContainerView的相同实例。我的广告横幅确实保持静态,因此它们到处都是一样的,但是仍然在管理方向更改和横幅视图变得混乱。当切换容器视图实例时,它也使广告横幅消失并在我切换视图时重新出现。

有没有一种方法可以在我的所有UIViewControllers ContainerViewA以及我添加的任何其他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/

10-14 21:42