2014-01-11 51 views
0

我在UIDatePickerModeDate的應用程序中使用UIDatePicker。我想使用的DatePicker的同一款式在iOS的聯繫地址簿,您可以設置日期沒有年份:顯示空值的UIDatePicker值

September | 11 | 2014 
October | 12 | ---- 
November | 13 | 

在文本框獲得字符串:October 12

任何想法?

enter image description here

回答

1

只需添加一個UIPickerView(NOT UIDatePickerView),並設置數據源(和代理)到類。然後在你的類中添加這樣的事情:

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView 
{ 
    return 3; 
} 

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component 
{ 
     switch (component) { 
    case 0: // how many days? (you might find out how many days the month really had, instead of just returning 31 
    { 
#if TARGET_IPHONE_SIMULATOR 

     return 50000; 
     // I don't now, what the exact Value for NSIntegerMax is, but 50000 should be enough for testing. 
#else 

     return NSIntegerMax; 
#endif 

     break; 
    } 
    case 1: // how many months to display? 
    { 
#if TARGET_IPHONE_SIMULATOR 

     return 50000; 
#else 

     return NSIntegerMax; 
#endif 

     break; 
    } 
    case 2: 
    { 
     return 100; // how many years? 
     break; 
    } 
} 
return 0; 
} 

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component 
{ 
if (component == 0) // days 
    return [NSString stringWithFormat:@"%i",(int)row % 31 + 1]; 
else if (component == 1) // month 
{ 
    NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init]; 
    [dateFormatter setDateFormat:@"MM"]; 
    NSDate* myDate = [dateFormatter dateFromString:[NSString stringWithFormat:@"%i",(int)row % 12 + 1]]; 

    NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
    [formatter setDateFormat:@"MMMM"]; 
    return [formatter stringFromDate:myDate]; 
} 


     else if (component == 2 && row == ([pickerView numberOfRowsInComponent:2] - 1)) 
    return @"-----"; 
     else 
     { 
      // let's use NSDateFormatter to get the current year: 
     NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
     [dateFormatter setDateFormat:@"YYYY"]; 

     return [NSString stringWithFormat:@"%i",[[dateFormatter stringFromDate:[NSDate date]] integerValue] - ([pickerView numberOfRowsInComponent:2] - 1) + (row + 1)]; 
     } 
} 

結果是這樣的: resulting PickerView

你可能爲了改變寬度爲每個組件實現

- (CGFloat)pickerView:(UIPickerView *)pickerView widthForComponent:(NSInteger)component 

+0

這對我很有用。你能幫助我製作第一個和第二個組件嗎?我的意思是在結束後重復值。 – palec

+0

我改變了我上面的答案。請注意,你不能讓選取器「真的」無窮無盡。用戶滾動NSIntegerMax後,它會停止(這是一個超高的值,正確的都不會這樣做)。 我希望我能幫上忙。如果你可以選擇我的答案作爲正確答案,那會很好;) –

0

UIDatepickerModeDate不會讓您獲得所需的日期格式。因此,無論是用戶UIPickerView &定製它獲得日期或其他,請按照上述答案的技巧。

此外,你可以有興趣閱讀此。

link 1

希望有所幫助。