2015-07-05 102 views
1

我是Swift的新手,很困惑如何以編程方式將自定義類添加到按鈕。我創建了一個自定義類,並可以使用故事板添加它。它工作正常,但如何以編程方式完成?以編程方式將類添加到Swift中的UIbutton

enter image description here

我可以使用CheckBox類到位的UIButton或我仍然需要使用的UIButton並添加類?

的Class

class CheckBox: UIButton { 

//images 
let checkedImage = UIImage(named: "checked_checkbox") //as UIImage! 
let uncheckedImage = UIImage(named: "unchecked_checkbox") //as UIImage! 

//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 { 
      println("setting to false") 
      isChecked = false 
     }else{ 
      println("setting to true") 
      isChecked = true 
     } 
    } 
} 
} 

添加類視圖控制器

override func viewDidLoad() { 
    super.viewDidLoad() 

    let checkBox = CheckBox() 

    checkBox.backgroundColor = UIColor.blueColor() 
    self.view.addSubview(checkBox) 

    checkBox.setTranslatesAutoresizingMaskIntoConstraints(false) 


    self.view.addConstraint(NSLayoutConstraint(item: checkBox, attribute: .Left, relatedBy: .Equal, toItem: self.view, attribute: .Left, multiplier: 1.0, constant: 50)) 
    self.view.addConstraint(NSLayoutConstraint(item: checkBox, attribute: .Top, relatedBy: .Equal, toItem: self.view, attribute: .Top, multiplier: 1.0, constant: 50)) 


} 
+1

您可以在您的代碼中使用您的Checkbox類代替UIButton –

+0

@TienDinh謝謝!我的問題必須是我的課程,或者我將Checkbox類添加到視圖控制器的方式。我更新了問題以包含viewDidLoad和class。我錯過了關於如何添加UIButton以編程方式與故事板的區別? – Oakland510

+0

「我的問題必須是我的課程,或者是我將Checkbox類添加到視圖控制器的方式」但是@Oracleland510,你沒有解釋你的問題_is_!複選框沒有出現在界面中?發生或未能發生的事情是有問題的? – matt

回答

3

複選框不會出現

莫非是因爲你已經忘了給你checkbox任意尺寸

另外,我注意到你有這些圖片:

let checkedImage = UIImage(named: "checked_checkbox") //as UIImage! 
let uncheckedImage = UIImage(named: "unchecked_checkbox") //as UIImage! 

但是那也許是因爲你已經忘記把要麼這些圖像的按鈕?我沒有看到任何代碼。

如果我打電話checkbox.isCheck = truefalse複選框出現,但如果點擊

莫非是因爲你忘了給你checkbox其控制事件的任何目標的行動不會改變?以前,您必須驗證碼:

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

但現在沒有awakeFromNib呼叫 - 此按鈕從筆尖不清醒。故事板是筆尖。這個按鈕現在來自代碼。

如果您修復該問題,以便調用該代碼,那麼將設​​置isChecked並顯示圖像,不是嗎?

+0

「故事板是筆尖」會解釋很多。設置大小似乎沒有幫助。如果我設置了大小和背景顏色,我只需點擊一個按鈕即可顯示沒有複選框圖像的顏色和大小。有更好的功能,我可以將awakeFromNib的內容移動到?我假設我可以將它移動到viewDidLoad,但寧可保留在類本身。 – Oakland510

+1

你在說'let checkBox = CheckBox()',所以你調用了CheckBox的'init()'方法。所以這可能會成爲放置該代碼的地方。 – matt

0

如果您決定以編程方式執行(swift 2.2),而不是通過故事板,請確保您添加了一個重寫int函數,一個所需的init?功能,並把你的重寫以下的init

override init(frame: CGRect) 
{ 
    super.init(frame: frame) 
    self.addTarget(self, action: #selector(CheckBox.ButtonClicked(_:)),  
    forControlEvents: UIControlEvents.TouchUpInside) 
    self.isChecked = false 
    self.setImage(uncheckedImage, forState: .Normal) 

} 

required init?(coder aDecoder: NSCoder) 
{ 
    super.init(coder: aDecoder) 

} 

最重要的一點是self.setImage。當View加載時,我無法看到圖像。

相關問題