Есть ли способ показать только год шоу UIDatePicker?
UIDatePicker покажет только год
Ответ 1
У меня есть маленький код, который я собирался удалить, но фрагмент лучше, если он где-то в сети. Это не удивительно, но доступно для поиска!
Objective-C код для создания массива всех лет с 1960 года. Идеально подходит для ввода в UIPicker
//Get Current Year into i2
NSDateFormatter* formatter = [[[NSDateFormatter alloc] init]autorelease];
[formatter setDateFormat:@"yyyy"];
int i2 = [[formatter stringFromDate:[NSDate date]] intValue];
//Create Years Array from 1960 to This year
years = [[NSMutableArray alloc] init];
for (int i=1960; i<=i2; i++) {
[years addObject:[NSString stringWithFormat:@"%d",i]];
}
Источники данных и делегатов UIPickerView
:
- (NSInteger)numberOfComponentsInPickerView: (UIPickerView*)thePickerView {
return 1;
}
- (NSInteger)pickerView:(UIPickerView *)thePickerView numberOfRowsInComponent:(NSInteger)component
{
return [years count];
}
- (NSString *)pickerView:(UIPickerView *)thePickerView
titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
return [years objectAtIndex:row];
}
Не забывайте декларацию в интерфейсе
//Data
NSMutableArray *years;
Вывод из него
Ссылка на здесь
Ответ 2
Вы не можете сделать это с помощью UIDatePicker
, но вы можете с помощью UIPicker
.
Вам нужно создать массив за годы и добавить их в UIPicker
с помощью делегатов UIPicker
Здесь учебник.
Ответ 3
Я не могу комментировать, но я играл с ответом Wolvorin, и я решил сделать так, чтобы последний год был на вершине Picker. В настоящее время его код стареет до самых последних лет.
Все мои изменения были в моей настройке NSMutableArray в viewDidLoad вместо его:
//Create Years Array from 1960 to This year
years = [[NSMutableArray alloc] init];
for (int i=1960; i<=i2; i++) {
[years addObject:[NSString stringWithFormat:@"%d",i]];
}
Я использовал:
years = [[NSMutableArray alloc] init];
for (int i1=i2; i1<=i2 & i1>=1920; i1--) {
[years addObject:[NSString stringWithFormat:@"%d",i1]];
}
Что делает for в обратном порядке, начиная с самой последней даты, а затем вычитает один год (и добавляет его в массив), пока не достигнет 1920.
Моя формула:
int i1=i2; i1<=i2 & i1>=1920; i1--
Ответ 4
Просто обновив существующий ответ в этом сообщении с помощью Swift 3:
var yearsTillNow : [String] {
var years = [String]()
for i in (1970..<2018).reversed() {
years.append("\(i)")
}
return years
}
Просто используйте это для источника данных UIPickerView
.
Ответ 5
Я немного изменил код Шаруха Мастана, чтобы всегда показывать текущий год на вершине.
var formattedDate: String? = ""
let format = DateFormatter()
format.dateFormat = "yyyy"
formattedDate = format.string(from: date)
var yearsTillNow: [String] {
var years = [String]()
for i in (Int(formattedDate!)!-70..<Int(formattedDate!)!+1).reversed() {
years.append("\(i)")
}
return years
}
print(yearsTillNow)
Это печатает множество лет, уходящих в прошлое на 70 лет.