为视图控制器根视图设置外观代理

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
    

【讨论】:

以上是关于为视图控制器根视图设置外观代理的主要内容,如果未能解决你的问题,请参考以下文章

动态设置拆分视图控制器为根视图控制器IOS

以编程方式设置为根视图控制器时,视图控制器无法正确显示子视图

如何在 AppDelegate 中将视图控制器设置为根视图控制器

将容器控制器(根视图控制器)设置为 UITabBarController 中视图控制器的委托

如何设置新的根视图控制器

设置 UINavigationBar 外观 whenContainedInInstancesOf 到我的视图控制器不起作用