0

UIViewControllers私はテーブルを含む2つを持っています:AB.
A のテーブルの行をタップすると、B に移動します。

と の各ビューの下部にA、同じsayを指す which がありBます。バナー広告を表示するために使用します。私が抱えている問題は、ビューが (からまたはに)変更されるたびに、必要に応じて再インスタンス化されることです。しかし、これは私が望んでいないことです。どこでも ContainerView の同じインスタンスを使用したい。広告バナーはどこでも同じになるように静的に保ちましたが、向きの変更とバナー ビューの管理は依然として面倒です。また、コンテナビューインスタンスが切り替えられると、ビューを切り替えると広告バナーが消えて再表示されます。ContainerViewUIViewControllerZZABBCUIViewController Z

ContainerViewすべての UIViewControllersAと、追加した他のビューコントローラーで全体の同じインスタンスを保持できる方法はありますBか?

4

1 に答える 1

1

このタスクを達成する 2 つのアプローチがあります。

最初のアプローチ: バナー追加ビュー コントローラーではなく、A、B、および C ビュー コントローラーであることを認識してください。必要に応じて、2 つのコンテナーを持つ親ビュー コントローラーを作成します。1 つはバナー広告用、もう 1 つは A、B、および C コントローラー用です。

2 番目のアプローチ: 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
        }
    }
}
于 2015-07-12T19:11:37.820 に答える