为视图控制器根视图设置外观代理
Posted
技术标签:
【中文标题】为视图控制器根视图设置外观代理【英文标题】:set appearance proxy for view controller root view 【发布时间】:2014-07-11 03:17:34 【问题描述】:是否可以在使用 UIAppearance 时仅针对视图控制器的根视图?我想从我的应用程序委托中为我的所有控制器设置背景颜色,但只想针对视图控制器上的直接视图。谢谢。
详细地说,每个 UIViewController 子类都有自己的 UIView 对象,您可以通过其 view 属性调用。这就是你在故事板中放置任何东西的视图,如 UITableView、UITabBar 等。我希望代理仅适用于该直接视图,因为 UIKit 中的所有内容几乎都是 UIView 的子类。
这样做的目的是集中控制我的视图控制器外观。我突然想到,也许我应该只使用 UIViewController 的子类,但我想有另一个地方来做我刚才描述的事情仍然很酷。
【问题讨论】:
你能详细说明一下吗(但只想针对视图控制器上的直接视图。)? 尝试方法:+ (instancetype)appearanceWhenContainedIn:(Class <UIAppearanceContainer>)ContainerClass,...
。所有的描述都在UIApperance Protocol Reference
已经说过一切都是UIView的子类。您不是通过调用该方法来定位根视图,这就是我的问题所在。谢谢。
【参考方案1】:
很遗憾,您无法使用外观代理来完成此操作。但是,如果您使用 swift 并从情节提要或 nib 加载视图控制器,一种解决方案是扩展 UIViewController 并覆盖 awakeFromNib,如下所示:
extension UIViewController
open override func awakeFromNib()
super.awakeFromNib()
view.backgroundColor = UIColor.blue
【讨论】:
以上是关于为视图控制器根视图设置外观代理的主要内容,如果未能解决你的问题,请参考以下文章
以编程方式设置为根视图控制器时,视图控制器无法正确显示子视图
如何在 AppDelegate 中将视图控制器设置为根视图控制器
将容器控制器(根视图控制器)设置为 UITabBarController 中视图控制器的委托
设置 UINavigationBar 外观 whenContainedInInstancesOf 到我的视图控制器不起作用