2015-12-21 71 views
1

我想要一张背景图片来显示我的所有视图。我能做到这一点我控制器上:如何在swift上设置默认背景图片

func viewDidLoad() { 
    self.view.backgroundColor = UIColor(patternImage: UIImage(named: "background")!) 
} 

但我想这是适用于所有控制器,一个解决办法是,虽然我觉得应该有一个更好的方法来创建一个共同的控制器。我试图设置这个appDelegate

self.window!.rootViewController!.view.backgroundColor = UIColor(patternImage: UIImage(named: "background")!) 

但没有运气,有什么建议吗?

+0

您的应用程序委托代码将只为工作第一个视图控制器显示你的应用一旦你离开它,你将需要重新设置背景。根据最适合您的方式,使用所给答案中列出的子类方法或扩展方法。 –

回答

1

我能得到的最接近的是这个扩展

extension UIViewController { 
    func colorMe() { 
     self.view.backgroundColor = UIColor(patternImage: UIImage(named: "background")!) 
    } 
} 

现在你只需要调用你想要的颜色各ViewControllercolorMe()

我知道你仍然需要在每个ViewController中编写一些代码,但至少你有一个集中定义你的整个应用程序的颜色。

那够了吗?

+0

感谢您的回复,听起来比拥有通用控制器更好一点。我会认为这是正确的。但是我仍然很困扰,因为这似乎是一件普通的事情,应该远离自定义应用风格。 – lgsanjos

1

你可以创建一个自定义的ViewController,它用你想要的背景进行初始化,每次你需要一个新的ViewController时,它都会继承你创建的另一个ViewController。

import UIKit 

class SameBackgroundViewController: UIViewController { 

var background: UIImageView! 

init(imageName: String) { 

    self.background = UIImageView(image: UIImage(named: imageName)) 
    super.init(nibName: nil, bundle: nil) 
    self.background.frame = self.view.frame 

} 

convenience init() { 

    let imageName = "background.jpg" 
    self.init(imageName: imageName) 

} 

required init?(coder aDecoder: NSCoder) { 
    fatalError("init(coder:) has not been implemented") 
} 

override func viewDidLoad() { 
    super.viewDidLoad() 

    self.view.addSubview(background) 

} 
} 

现在新的视图控制器会是这样

class NewViewController: SameBackgroundViewController { 

} 

希望我能帮助,这是我在计算器上:)第一个答案

+0

感谢回复@LeoWajnsztok我最初做了一个类似的解决方案,如你所建议的, 这是重写viewDidLoad并设置背景的问题。但我仍然认为扩展解决方案是更好的方法。 – lgsanjos