从 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】:尝试通过AppDelegate
或UIApplication
类访问窗口:
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 方法