2016-11-08 51 views
0

我在我的键盘上添加一个datePicker文本框。 我能够改变datePicker的文字颜色或甚至它的alpha,但我不能改变它的backgroundColor,即使这个选项给了我。如何更改UIDatePicker backgroundColor?在Swift 3.0

我知道UIDatePicker不是非常可定制的,但由于有一个backgroundColor选项给我,我很惊讶为什么它没有改变。

有什么想法?

这里是我的代码:

datePickerView.backgroundColor = .clear 
    datePickerView.setValue(backgroundTint, forKeyPath: "textColor") 
    datePickerView.datePickerMode = UIDatePickerMode.date 
    inputView.addSubview(datePickerView) 

编辑

我写我的代码中的UITableViewCell ---的一个子类>

进口的UIKit

类AgeTableViewCell :UITableViewCell,UITextFieldDelegate {

let maxLength: Int = 10 
let ageTextField = ProfileNameUITextField() 

override func awakeFromNib() { 
    super.awakeFromNib() 
    // Initialization code 
} 

override init(style: UITableViewCellStyle, reuseIdentifier: String?) { 
    super.init(style: style, reuseIdentifier: reuseIdentifier) 

    self.contentView.addSubview(ageTextField) 

    self.contentView.backgroundColor = .clear 

    if self.responds(to: #selector(setter: UITableViewCell.separatorInset)) { 
     self.separatorInset = UIEdgeInsets.zero 
    } 
    if self.responds(to:#selector(setter: UIView.layoutMargins)) { 
     self.layoutMargins = UIEdgeInsets.zero 
    } 
    if self.responds(to: #selector(setter: UIView.preservesSuperviewLayoutMargins)) { 
     self.preservesSuperviewLayoutMargins = false 
    } 
} 

required init(coder aDecoder: NSCoder) { 
    super.init(coder: aDecoder)! 
} 

override func layoutSubviews() { 
    super.layoutSubviews() 

    let width = self.bounds.width 
    let height = self.bounds.height 
    let borderWidth: CGFloat = 1.0 
    let color = UIColor.white.withAlphaComponent(0.1) 
    ageTextField.frame = CGRect(x: 0.0, y: borderWidth, width: width - borderWidth, height: height - 2 * borderWidth) 
    ageTextField.borderStyle = .none 
    ageTextField.backgroundColor = color 
    ageTextField.textColor = .white 
    ageTextField.tintColor = .white 
    ageTextField.delegate = self 
    ageTextField.attributedPlaceholder = NSAttributedString(string:"Birth Date", 
                  attributes:[NSForegroundColorAttributeName: UIColor.lightGray]) 
    setUpAgeTextFieldsInputView() 
} 

override func setSelected(_ selected: Bool, animated: Bool) { 
    super.setSelected(selected, animated: animated) 

    // Configure the view for the selected state 
} 

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool { 
    let oldLength: Int = (textField.text?.characters.count)! 
    let replacementLength: Int = string.characters.count 
    let rangeLength: Int 
     = Int(range.length) 
    let newLength = oldLength - rangeLength + replacementLength 
    let returnKey = (string as NSString).range(of: "\n").location != NSNotFound 
    return newLength <= maxLength || returnKey 
} 

func setUpAgeTextFieldsInputView() { 
    let inputView = UIView(frame: CGRect(x: 0.0, y: 0.0, width: self.bounds.width, height: 140)) 

    inputView.backgroundColor = backgroundTint 

    // setup date picker 
    let datePickerView = UIDatePicker(frame: CGRect(x: 0.0, y: 40.0, width: self.bounds.width, height: 100)) 
    datePickerView.backgroundColor = .clear 
    datePickerView.setValue(backgroundTint, forKeyPath: "textColor") 
    datePickerView.datePickerMode = UIDatePickerMode.date 

    // set the date picker max date and showing date 
    let gregorian = NSCalendar(calendarIdentifier: NSCalendar.Identifier.gregorian)! 
    let currentDate = NSDate() 
    let component = NSDateComponents() ; component.year = -18 
    let date = gregorian.date(byAdding: component as DateComponents, to: currentDate as Date, options: NSCalendar.Options(rawValue: 0)) 
    datePickerView.date = date! 
    datePickerView.maximumDate = currentDate as Date 

    inputView.addSubview(datePickerView) 

    // Make done button 
    let doneButton = UIButton(frame: CGRect(x: 0.0, y: 1.0, width: self.bounds.width, height: 38.0)) 
    doneButton.backgroundColor = UIColor.white.withAlphaComponent(0.1) 
    doneButton.setTitle("Done", for: UIControlState.normal) 
    doneButton.setTitleColor(appPink, for: UIControlState.normal) 
    doneButton.setTitleColor(UIColor.gray, for: UIControlState.highlighted) 

    inputView.addSubview(doneButton) 

    // set actions for buttons and picker 
    doneButton.addTarget(self, action: #selector(done), for: UIControlEvents.touchUpInside) 
    ageTextField.inputView = inputView 
    datePickerView.addTarget(self, action: #selector(handleDatePicker(_:)), for: UIControlEvents.valueChanged) 
} 

func done() { 
    self.endEditing(true) 
} 

func handleDatePicker(_ sender: UIDatePicker) { 
    let dateFormatter = DateFormatter() 
    dateFormatter.dateFormat = "yyyy-MM-dd" 
    ageTextField.text = dateFormatter.string(from: sender.date) 
} 

}

+0

datePickerView.backgroundColor = UIColor.blue – negaipro

+0

'datePickerView.backgroundColor = .yellow'或Ÿ其他颜色的作品。你必须为你的问题提供更多的上下文。 – Frankie

回答

3

看来在你想要的方式来工作,不一定只。

例如,将backgroundColor更改为明显(.clear除外)显然有效。它将色调更改为该颜色。

更改"textColor"属性也会产生一些明显的变化,但似乎该控件是基于背景动态计算确切的前景色,以使其始终易读。如果您尝试使用像.ligtGray.black这样的颜色,这将变得很明显。

对不起,为进一步定制您运气不好。 :(

picker.backgroundColor = .white 
picker.setValue(UIColor.red, forKey:"textColor") 

Screenshot of date picker

0

嘿,通过我的代码去后,我意识到,我已经指派一个键盘类型我文本框,然后我试图其inputview更改为日期选择器视图。除去分配固定我的bgcolor问题。

0

您可能需要设置UIKeyboardType = .DEFAULT和UIKeyboardAppearance = .DEFAULT