Ios開發Swift自定義UIbutton增加一個能設定高亮狀態下背景顏色的方法
阿新 • • 發佈:2019-01-06
UIButton中沒有setBackgroundColor(color UIColor state:UIControlState)的方法,因此自己寫一個
/// // <span style="font-family: Arial, Helvetica, sans-serif;">JoopicButton</span><span style="font-family: Arial, Helvetica, sans-serif;">.swift</span> // // // Created by lax li on 16/1/12. // Copyright © 2016年 . All rights reserved. // import Foundation class JoopicButton:UIButton{ var _colors:NSMutableDictionary = NSMutableDictionary() override init(frame: CGRect) { super.init(frame: frame) self.backgroundColor = UIColor.whiteColor() _colors.setValue(UIColor.whiteColor(), forKey: self.keyForState(UIControlState.Normal)) } // init(){ // super.init(frame: CGRectZero) // } required init(coder aDecoder: NSCoder) { super.init(coder:aDecoder)! } override var highlighted: Bool { get { return super.highlighted } set { super.highlighted = newValue let obj = _colors.valueForKey(self.keyForState(UIControlState.Highlighted)) let highlightedColor:UIColor? = (obj as? UIColor) if(newValue && (highlightedColor != nil)){ super.backgroundColor = highlightedColor }else{ let selectObj = _colors.valueForKey(self.keyForState(UIControlState.Selected)) if(self.selected && (selectObj != nil)){ let selectedColor:UIColor? = selectObj as? UIColor super.backgroundColor = selectedColor }else{ var normalColor:UIColor? = _colors.valueForKey(self.keyForState(UIControlState.Normal)) as? UIColor if(normalColor == nil){ normalColor = UIColor(CGColor: self.layer.backgroundColor!) } super.backgroundColor = normalColor } } } } override var selected: Bool { get { return super.selected } set { super.selected = newValue let selectedColor:UIColor? = _colors.valueForKey(self.keyForState(UIControlState.Selected)) as? UIColor if(newValue && (selectedColor != nil)){ super.backgroundColor = selectedColor }else{ var normalColor:UIColor? = _colors.valueForKey(self.keyForState(UIControlState.Normal)) as? UIColor if(normalColor == nil){ normalColor = UIColor(CGColor: self.layer.backgroundColor!) } super.backgroundColor = normalColor } } } override var backgroundColor:UIColor? { get { return super.backgroundColor } set { super.backgroundColor = newValue _colors .setValue(newValue, forKey: self.keyForState(UIControlState.Normal)) } } func backgroundColorForState(state: UIControlState) -> UIColor? { return _colors.valueForKey(self.keyForState(state)) as? UIColor } func setBackgroundColorForState(color:UIColor,state:UIControlState){ if(state == UIControlState.Normal){ super.backgroundColor = color } _colors .setValue(color, forKey: self.keyForState(state)) } func keyForState(state:UIControlState) ->String{ let str = NSString(string: "state_\(state.rawValue)") return str as String } }
在oc中的使用
JoopicButton *cancelButton = [[JoopicButton alloc] initWithFrame:CGRectMake(10,CGRectGetHeight(_tableview.frame)+8, ScreenWidth-20, JoopicActionSheetItemHeight)]; cancelButton.layer.cornerRadius =15; //cancelButton.layer.backgroundColor = [UIColor greenColor].CGColor; //cancelButton.backgroundColor = [UIColor greenColor]; //[cancelButton setBackgroundColorForState:[UIColor greenColor] state:UIControlStateNormal]; [cancelButton setBackgroundColorForState:[UIColor grayColor] state:UIControlStateHighlighted];