Static ContainerView

У меня есть 2 UIViewControllers которые содержат таблицы: A а также B,
Постукивание строки в таблице в A переходит к B.

Внизу каждого вида A а также B, У меня есть ContainerView что указывает на то же самое UIViewController сказать Z, я использую Z показывать рекламные баннеры. У меня есть проблема каждый раз, когда мое мнение меняется (от A в B или же B в C), UIViewControllerZ получает экземпляр как следует. Но это то, чего я не хочу. Я хочу использовать один и тот же экземпляр ContainerView везде. Я держал свои рекламные баннеры статичными, чтобы они везде были одинаковыми, но все же управление изменениями ориентации и просмотром баннеров становится беспорядочным. Также это заставляет рекламный баннер исчезать и снова появляться, когда я переключаю свое представление, поскольку экземпляр контейнера-представления переключается.

Есть ли способ, которым я могу сохранить один и тот же экземпляр всего ContainerView во всех моих UIViewControllers A а также B а какие-нибудь другие viewcontrollers я добавлю?

1 ответ

Решение

Есть два подхода, которые решат эту задачу.

Первый подход. Поймите, что ваши контроллеры представления A, B и C должны находиться в контейнере, а не в контроллере добавления баннера. По желанию, создайте родительский контроллер представления с двумя контейнерами - один для баннерной рекламы, другой для контроллеров 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
        }
    }
}
Другие вопросы по тегам