从 ViewController 调用时如何设置应用的 UIWindow 颜色

Posted

技术标签:

【中文标题】从 ViewController 调用时如何设置应用的 UIWindow 颜色【英文标题】:How to set an app's UIWindow color when calling it from ViewController 【发布时间】:2016-03-10 14:59:47 【问题描述】:

在 App 委托中,可以设置应用程序的 UIWindow 颜色,如代码所示。

但是,当尝试将应用程序的 UIWindow 颜色设置为 ViewController 中的不同颜色时,例如对 self.window?.backgroundColor = UIColor.blueColor() 的调用会被忽略。不会发生错误,但也不会发生颜色变化。

问题:

1 - 在ViewController 中调用应用程序时,如何设置应用程序的窗口颜色? 注意:我不是要更改 View 背景颜色,而是要更改位于 View 后面的 UIWindow 颜色。

class AppDelegate: UIResponder, UIApplicationDelegate 

    var window: UIWindow?

    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool 

        self.window?.backgroundColor = UIColor.redColor()

        return true

    


【问题讨论】:

【参考方案1】:

尝试通过AppDelegateUIApplication 类访问窗口:

    

if let window = (UIApplication.sharedApplication().delegate?.window)! as UIWindow! 
    window.backgroundColor = UIColor.redColor()

if let window = UIApplication.sharedApplication().windows.first as UIWindow! 
    window.backgroundColor = UIColor.redColor()

【讨论】:

UIApplication.sharedApplication().windows.first?.backgroundColor = UIColor.redColor() 他还需要设置view.backgroundColor = UIColor.clearColor() 非常感谢。对选项一稍作改动,它就奏效了,选项二也是如此。您是否有机会解释这两个选项之间的区别,以及为什么需要将其包含在 if 语句中才能起作用?谢谢。 @user4806509 if 只是为了使代码更简洁,您可以像 Leo Dabus 评论的那样在一行中完成此操作。这里的不同之处在于我们将您的 AppDelegate 引用到 window 与与您的 UIApplication 类关联的 UIWindows 数组(您的应用程序可以有多个窗口)。您最初的 self.window 尝试没有奏效,因为您的视图控制器当时可能没有对它的窗口的引用(它没有被呈现,等等)。 JAL , @LeoDabus 我有一个与UIWindow color 相关的新问题:***.com/questions/35993514【参考方案2】:

对于 Objective-C,您可以使用以下代码:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 

    // your code
    [UIApplication sharedApplication].delegate.window.backgroundColor = [UIColor yourColor]; 

    return YES;

【讨论】:

【参考方案3】:

斯威夫特 5:

if let window = UIApplication.shared.delegate?.window as? UIWindow 
    window.backgroundColor = .red

【讨论】:

以上是关于从 ViewController 调用时如何设置应用的 UIWindow 颜色的主要内容,如果未能解决你的问题,请参考以下文章

从 UIButton 向 ViewController 发送通知

如何从我的应用程序委托启动一个 NSTimer,它在 Viewcontroller.m 中调用我的方法

iOS:从 popOver 刷新 ViewController

如何从 AppDelegate.m 调用 ViewController.m 方法

如何从 AppDelegate 调用在 ViewController 中声明的方法

如何从swiftui视图调用uikit viewcontroller方法