【发布时间】:2017-12-01 13:11:14
【问题描述】:
我实现了一个包含 2 个组件的 UIPickerview。我想在每个上面设置一个标题。我该怎么做?
我不想在选择器上方放置一个单独的标签。
【问题讨论】:
-
UIPickerView不支持在每个组件上方添加标签。您要么需要添加标签(您说出于某种原因不想这样做),要么按照@the4kman 链接中的建议进行操作。
标签: ios swift uipickerview
我实现了一个包含 2 个组件的 UIPickerview。我想在每个上面设置一个标题。我该怎么做?
我不想在选择器上方放置一个单独的标签。
【问题讨论】:
UIPickerView 不支持在每个组件上方添加标签。您要么需要添加标签(您说出于某种原因不想这样做),要么按照@the4kman 链接中的建议进行操作。
标签: ios swift uipickerview
我经常在我的UIPickerView 中添加一个只有一行的附加组件,并将该行的标题设置为下一个组件的标题。
例如对于“小时和分钟”UIPickerView。
func numberOfComponents(in pickerView: UIPickerView) -> Int {
return 4 //2 headers and 2 values
}
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
if component == 0 {
return 1 //hours header
} else if component == 1 {
return 100 //hours
} else if component == 2{
return 1 //minutes header
} else {
return 4 //minutes
}
}
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
if component == 0 {
return "Hours:" //header
} else if component == 1 {
return "\(row + 1)" //value
} else if component == 2 {
return "Minutes:" //header
} else if component == 3 {
return "\(row * 15)" //value
}
return nil
}
结果会是这样的:
【讨论】:
func setHeadersForPickerView() {
let labelWidth = deliveryPicker.frame.width / CGFloat(deliveryPicker.numberOfComponents)
for index in 0..<pickerHeaders.count {
let label: UILabel = UILabel(frame: CGRect(x: deliveryPicker.frame.origin.x + (labelWidth * CGFloat(index)), y: 10, width: labelWidth + 40, height: 20))
label.text = pickerHeaders[index]
label.textAlignment = .center
deliveryPicker.addSubview(label)
}
}
【讨论】: