2015-12-21 76 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