如何在swift中更改子视图的背景颜色?

时间:2015-10-16 23:10:59

标签: swift colors background

我创建了一个新的子视图类来进行绘图 我已经覆盖了函数drawRect()但我无法改变 我使用背景方法的子视图的背景颜色,但它确实没有用!

self.headerView

4 个答案:

答案 0 :(得分:4)

您需要在drawRect之前设置背景颜色。调用drawRect时,已经绘制了背景。如果您需要能够在drawRect中设置背景颜色,只需自己绘制,就像绘制蓝色矩形轮廓的方式一样。

required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
    self.backgroundColor = UIColor.blackColor()
}

class AbedView:UIView {
     override func drawRect(rect: CGRect) {
        let color = UIColor.blueColor()
        let cgrRect = CGRect(x: 0, y: 0, width: 100, height: 100)
        let newView = UIBezierPath(rect: cgrRect)
        print(newView.bounds)
        color.set()
        newView.lineWidth = 5
        newView.stroke()
    }
}

答案 1 :(得分:2)

创建此视图时不必设置背景颜色。

创建视图后的任何时候,只需在视图上调用此行代码,它的背景颜色就会改变

view.backgroundColor = UIColor.blackColor()

答案 2 :(得分:1)

跟随Gary Makin的想法,这对我有用。我有一个GameBoardView类的UIView视图,它是class GameBoardView: UIView { override func drawRect(rect: CGRect) { self.backgroundColor = UIColor.greenColor() } } 的子类。

当我这样做时,它不会覆盖我在故事板中设置的颜色:

ViewController

但是当我在viewWillAppear() class ViewController: UIViewController { // some code override func viewWillAppear(animated: Bool) { // more code gameBoard.backgroundColor = UIColor.greenColor() // some other code } // still more code } 方法中添加该行时,它会起作用:

/home/api/order/1

希望有所帮助

答案 3 :(得分:0)

我创建了一个"准备"函数,我在创建视图时调用:

class myView: UIView {
  func prepare() {
      backgroundColor = UIColor.blueColor()
  }

  override func drawRect(rect: CGRect) {
  // custom stuff
  }
}

用法(这将返回要在tableview标头中使用的新视图):

        let myView = myView()
        myView.prepare()
        return myView

我确信有更简洁的方法可以做到这一点,但我并不想弄乱初始值设定项,创建扩展程序或者使用图层进行捣乱。这很简单而且有效。据我所知,唯一的缺点是你无法在drawrect:time时动态确定颜色。但如果您在初始化期间知道颜色,那么这应该可行。

享受。