我想用uipickerview创建我自己的日期选择器,我可以在公元前9999年之间做出选择。和2015年A.D.我使用UIPickerview和多个组件。我的前4个组件只包含数字0-9。 组件1持有数千年(1000,2000 usw ...)。 我的最后一个部分包含{A.D. &安培;公元前。)。根据最后一个Picker,我会改变组件1的值,它代表年份的thousender。如果用户选择“A.D.”在最后一个组件中,不应该在第一个组件中选择3-9。
如何实现这一目标?
代码:
func showDatePicker(){
var datePicker=UIPickerView()
datePicker.frame=CGRectMake(1, 100, 250, 162)
datePicker.delegate=self
datePicker.dataSource = self
datePicker.tag = 1
datePicker.backgroundColor=UIColor.orangeColor();
datePicker.selectRow(180, inComponent: 0, animated: true)
self.view.addSubview(datePicker)
}
func numberOfComponentsInPickerView(pickerView: UIPickerView!) -> Int {
return 5
}
func pickerView(pickerView: UIPickerView!, numberOfRowsInComponent component: Int) -> Int {
println("evaluate amount of components");
if component == 0{
return 10
}else if component == 1{
return 10
}else if component == 2{
return 10
}else if component == 3{
return 10
}else if component == 4{
return 2
}
return 10
}
func pickerView(pickerView: UIPickerView!, titleForRow row: Int, forComponent component: Int) -> String! {
if component == 0{
return "\(row)"
}else if component == 1{
return "\(row)"
}else if component == 2{
return "\(row)"
}else if component == 3{
return "\(row)"
}else if component == 4{
if(row==0){
return "A.D.";
Here I like to limit the values of component 1 to {0,1,2}, because
the year should not go over the year 3000 A.D.
}else{
return "B.C.";
}
}else{
return "?";
}
}
**更新我的解决方案**
我不知道这是不是最佳做法,但我解决了以下问题: 根据年份,我在选择器视图中显示不同数量的值:
func pickerView(pickerView: UIPickerView!, numberOfRowsInComponent component: Int) -> Int {
println("evaluate amount of components");
let iYear=DataContainer.sharedInstance.iYear;
if(iYear > 0){
if component == 0{
return 3;
}else if component == 1{
return 10;
}else if component == 2{
return 10;
}else if component == 3{
return 10;
}else if component == 4{
return 2;
}else{
return 1;
}
}else{
if component == 0{
return 10
}else if component == 1{
return 10
}else if component == 2{
return 10
}else if component == 3{
return 10
}else if component == 4{
return 2
}else{
return 1;
}
}
}
当我更改我的最后一个组件(5)时,显示“A.D.”或“B.C.”我只是刷新了挑选者视图:
func pickerView(pickerView: UIPickerView!, titleForRow row: Int, forComponent component: Int) -> String! {
...
else if component == 4{
if(row==0){
if (iYear < 0 ){
//DataContainer.sharedInstance.iYear = -iYear;
datePicker.reloadAllComponents();
}
return "A.D.";
}else{
if (iYear > 0 ){
//DataContainer.sharedInstance.iYear = -iYear;
datePicker.reloadAllComponents();
}
//datePicker.reloadAllComponents();
return "B.C.";
}
}
答案 0 :(得分:1)
显然,你必须对第5个组件的变化作出反应。在pickerView(didSelectRow:inComponent)
处理A.D.
的更改。也许保留一个标志,指示选择了哪一个。
然后致电reloadComponent()
或reloadAllComponents
以更新选择器视图。