静态容器视图
Static ContainerView
我有 2 个 UIViewControllers
,其中包含表:A
和 B
。
在 A 中点击 table 中的一行转到 B.
在 A
和 B
的每个视图的底部,我有一个 ContainerView
指向相同的 UIViewController
说 Z
。我使用 Z
来显示横幅广告。我遇到的问题是每次我的视图发生变化(从 A
到 B
或 B
到 C
),UIViewController
Z
都会重新- 应有的实例化。但这是我不想要的。我想在任何地方都使用相同的 ContainerView 实例。我确实让我的广告横幅保持静态,所以它们在任何地方都是一样的,但仍然管理方向变化和横幅视图变得混乱。当我切换视图时,它还会使广告横幅消失并重新出现,因为容器视图实例已切换。
有没有一种方法可以在我所有的 UIViewControllers A
和 B
以及我添加的任何其他视图控制器中保留整个 ContainerView
的相同实例?
有两种方法可以完成此任务。
第一种方法:意识到应该在容器中的是您的 A、B 和 C 视图控制器,而不是横幅添加视图控制器。或者,制作一个包含两个容器的 parent 视图控制器——一个用于横幅广告,另一个用于 A、B 和 C 控制器。
第二种方法:当从 A 到 B 再到 C 时,简单地传递这个视图控制器。你可以通过给他们一个共同的 parent.
来非常简化这个
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
}
}
}
我有 2 个 UIViewControllers
,其中包含表:A
和 B
。
在 A 中点击 table 中的一行转到 B.
在 A
和 B
的每个视图的底部,我有一个 ContainerView
指向相同的 UIViewController
说 Z
。我使用 Z
来显示横幅广告。我遇到的问题是每次我的视图发生变化(从 A
到 B
或 B
到 C
),UIViewController
Z
都会重新- 应有的实例化。但这是我不想要的。我想在任何地方都使用相同的 ContainerView 实例。我确实让我的广告横幅保持静态,所以它们在任何地方都是一样的,但仍然管理方向变化和横幅视图变得混乱。当我切换视图时,它还会使广告横幅消失并重新出现,因为容器视图实例已切换。
有没有一种方法可以在我所有的 UIViewControllers A
和 B
以及我添加的任何其他视图控制器中保留整个 ContainerView
的相同实例?
有两种方法可以完成此任务。
第一种方法:意识到应该在容器中的是您的 A、B 和 C 视图控制器,而不是横幅添加视图控制器。或者,制作一个包含两个容器的 parent 视图控制器——一个用于横幅广告,另一个用于 A、B 和 C 控制器。
第二种方法:当从 A 到 B 再到 C 时,简单地传递这个视图控制器。你可以通过给他们一个共同的 parent.
来非常简化这个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
}
}
}