我想用uipickerview创建我自己的日期选择器,我可以在9999 B.C.之间进行选择。和2015年A.D.我使用UIPickerview和更多的组件。我的前4个组件仅包含数字0-9。 组件1拥有千年(1000,2000 usw ...)。 我最后的组件包含{A.D. B.C.)。取决于最后一个选择器,我会更改组件1的值,它代表了这些年的选择。如果用户选择了“A.D.”在最后一个组件中,不应该有可能在第一个组件中选择3-9。如何更改由事件触发的pickerviews的值
如何实现这一目标?
代码:
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 "?";
}
}
**更新我的解决方案**
我不知道这是不是最好的做法,但我解决了这个问题如下: 取决于我表现出不同年份pickerview中的值的数量:
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),其中显示“AD”或“B.C.”我只是刷新pickerview:
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.";
}
}
非常感谢。我只是自己发泄。 Perhabs您可以在问题中查看我的更新以确认这是最佳做法吗?谢谢。 –
看起来不错;-)。有时它有助于写出问题以清楚地理解问题。 – Mundi
是的。或者我可能有点太急躁:-)我希望这个问题也能帮助其他人。 –