下面是“小时/分/秒”覆盖另一种解决方案。它使用拾取器视图委托中的pickerView(UIPickerView, didSelectRow: Int, inComponent: Int)
方法来更新视图的标签。
这样,无论屏幕方向如何,它都能正常工作。 它仍然不是最佳的但它非常简单。
func pickerView(_ pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusing view: UIView?) -> UIView {
let label = UILabel()
label.text = String(row)
label.textAlignment = .center
return label
}
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
if let label = pickerView.view(forRow: row, forComponent: component) as? UILabel {
if component == 0, row > 1 {
label.text = String(row) + " hours"
}
else if component == 0 {
label.text = String(row) + " hour"
}
else if component == 1 {
label.text = String(row) + " min"
}
else if component == 2 {
label.text = String(row) + " sec"
}
}
}
已经是显示选择器视图时,行必须以编程方式选择的重叠出现...
func selectPickerViewRows() {
pickerView.selectRow(0, inComponent: 0, animated: false)
pickerView.selectRow(0, inComponent: 1, animated: false)
pickerView.selectRow(30, inComponent: 2, animated: false)
pickerView(pickerView, didSelectRow: 0, inComponent: 0)
pickerView(pickerView, didSelectRow: 0, inComponent: 1)
pickerView(pickerView, didSelectRow: 30, inComponent: 2)
}
来源
2017-06-19 14:41:32
nyg
使用带有3个组件的uiPickerView,每个组件都有数组。 HourArray从(1到12)。 MinutesArray(1到60)。秒数组(1到60) –
@safecase。我从技术上理解它是如何完成的。我所要求的是,如果有人想与我分享这段代码,而不是我从零开始写它 –
@EmilioPelaez - 请不要使用“我们”。你不会在这里为整个iOS开发社区说话。有很多优秀的开发人员可以愉快地分享知识和代码。如果我最终编写代码,我会在这里与其他社区和任何未来可能感兴趣的人分享,并阅读我的文章 –