我想用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
是的。或者我可能有點太急躁:-)我希望這個問題也能幫助其他人。 –