2016-01-20 67 views
1

我能夠創建自定義複選框按鈕類。但是,當我嘗試將按鈕放在我的視圖中時,我沒有看到圖像。設置背景顏色只需返回該尺寸的正方形。這裏是我的添加盒代碼:如何以編程方式快速添加自定義UIButton

 let box:CheckBox = CheckBox() 
    box.frame = CGRectMake(screenSize.width/2, screenSize.height/2, 200, 200) 
    self.view.addSubview(box) 

I created the class as follows: 

class CheckBox: UIButton { 
    override init(frame: CGRect) { 
     super.init(frame: frame) 
     //other stuff 
    } 
    required init?(coder aDecoder: NSCoder) { 
     fatalError("init(coder:) has not been implemented") 
    } 
    // Images 
    let checkedImage = UIImage(named: "checked_checkbox") 
    let uncheckedImage = UIImage(named: "checkbox_unchecked_icon") 

    // Bool property 
    var isChecked: Bool = false { 
     didSet{ 
      if isChecked == true { 
       self.setImage(checkedImage, forState: .Normal) 
      } else { 
       self.setImage(uncheckedImage, forState: .Normal) 
      } 
     } 
    } 

    override func awakeFromNib() { 
     self.addTarget(self, action: "buttonClicked:", forControlEvents: UIControlEvents.TouchUpInside) 
     self.isChecked = false 
    } 

    func buttonClicked(sender: UIButton) { 
     if sender == self { 
      if isChecked == true { 
       isChecked = false 
      } else { 
       isChecked = true 
      } 
     } 
    } 
} 
+2

你不是從XIB文件創建你的複選框實例,所以'awakeFromNib'永遠不會被調用。 – Bastek

+0

@Bastek在那裏awakeFromNib內的代碼應該去哪裏? – DMop

+0

請不要在您的問題中「修復」您的代碼。如果您有答案,則需要將其**作爲答案**發佈,並保留完整的問題。 – meagar

回答

0

將您awakeFromNib代碼到你init()awakeFromNib僅在從nib/xib文件初始化時調用。

這永遠不會被調用。你可以通過設置一個斷點來測試它。

這是它應該如何看:

override init(frame: CGRect) { 
    super.init(frame: frame) 
    self.addTarget(self, action: "buttonClicked:", forControlEvents: UIControlEvents.TouchUpInside) 
    self.isChecked = false 
} 

這樣,self.isChecked被調用,圖像設置,你會看到一個比一個灰色的框了。

+0

對不起,這是我的錯。我的意思是從所有人中刪除吸菸者這個詞,因爲這是一個盒子來檢查一個人是不是吸菸者。但是,吸菸者出現在你看到的任何地方 – DMop

+1

然後,我可以看到的另一件事是,你應該將'awakeFromNib'代碼移動到'init'中。這是當你使用'CheckBox()'時會被調用的東西。我會更新 –

+0

這似乎工作!謝謝!我只有一個問題。當視圖最初加載時,兩個圖像都不顯示,它只是一個帶有背景顏色的框。我將如何讓未經檢查的盒子馬上顯示出來? – DMop

相關問題