Подтвердить что ты не робот

UIDatePicker покажет только год

Есть ли способ показать только год шоу UIDatePicker?

4b9b3361

Ответ 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;

Вывод из него

enter image description here

Ссылка на здесь

Ответ 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 лет.