поместить случайные числа в столбец UIPicker

#objective-c

#цель-c

Вопрос:

Это то, что я хочу:

Как мне случайным образом выбрать объект из массивов, которые я должен заполнить в первых трех столбцах моего UIPicker. Я хочу, чтобы это действие не затронуло последние два столбца. Поэтому, когда пользователь нажимает кнопку «сгенерировать», они помещают случайные объекты в первые три столбца моего средства выбора. Вот что у меня есть:

 - (void)viewDidLoad

{

self.column1Array = [[NSArray alloc] initWithObjects:
                     @" 10", @" 9", @" 8", @" 7", @" 6", @" 5", @" 4", @" 3", @" 2",     @" 1", @"0", @"-1", @"-2", @"-3", @"-4", @"-5", @"-6", @"-7", @"-8", @"-9", 
                     @"-10", nil];

self.column2Array = [[NSArray alloc] initWithObjects:
                     @" ", @"-", nil];

self.column3Array = [[NSArray alloc] initWithObjects:
                     @" 10", @" 9", @" 8", @" 7", @" 6", @" 5", @" 4", @" 3", @" 2", @" 1", @"0", @"-1", @"-2", @"-3", @"-4", @"-5", @"-6", @"-7", @"-8", @"-9", 
                     @"-10",nil];
self.column4Array = [[NSArray alloc] initWithObjects:
                     @"=", nil];
self.column5Array = [[NSArray alloc] initWithObjects:
                     @" 20", @" 19", @" 18", @" 17", @" 16", @" 15", @" 14", @" 13",    @" 12", 
                     @" 11", @" 10", @" 9", @" 8", @" 7", @" 6", @" 5", @" 4", @" 3", @" 2", 
                     @" 1", @"0", @"-1", @"-2", @"-3", @"-4", @"-5", @"-6", @"-7", @"-8", @"-9", 
                     @"-10",@"-11", @"-12", @"-13", @"-14", @"-15", @"-16", @"-17", @"-18", 
                     @"-19", @"-20", nil];

[super viewDidLoad];
  

}

Ответ №1:

Это должно сработать, хотя я его не тестировал. Это также предполагает, что ваш UIPicker называется picker .

 int column1Random = (arc4random() % [colum1Array count])-1;
[picker selectRow:column1Random inComponent:0 animated:YES];

int column2Random = (arc4random() % [colum2Array count])-1;
[picker selectRow:column2Random inComponent:1 animated:YES];

int column3Random = (arc4random() % [colum3Array count])-1;
[picker selectRow:column3Random inComponent:2 animated:YES];
  

Вам необходимо обновить методы pickerView:numberOfRowsInComponents и pickerView:titleForRows:forComponents

 - (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent :(NSInteger)component 
{ 
    if (component==0) {
        return [column1Array count];
    } else if (component==1){ 
        return[column2Array count];
    } else if (component==2){ 
        return[column32Array count];
    } else if (component==3){ 
        return[column4Array count];
    } else {
        return[column5Array count];
    }
}
// Method to show the title of row for a component.
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{ 
    switch (component)  
    {
        case 0:
            return [column1Array objectAtIndex:row];
            break;
        case 1:
            return [column2Array objectAtIndex:row];
            break;
        case 2:
            return [column3Array objectAtIndex:row];
            break;
        case 3:
            return [column4Array objectAtIndex:row];
            break;
        case 4:
            return [column5Array objectAtIndex:row];
            break;
        }
    return nil;
}
  

Комментарии:

1. Я все еще не могу заставить его работать. IBAction, похоже, не происходит. Когда я нажимаю на кнопку генерации, возникает ошибка, и она отключается. Хотя в коде нет ошибок, перечисленных до его запуска.

2. @user908462 можете ли вы перечислить код для IBAction? Работало ли IBAction до того, как я вставил в него код, который я вам дал?

3. -(IBAction) генерировать Я не думаю, что я делаю IBAction правильно. Это все, что у меня есть, и я подключил кнопку генерации в xib-файле

4. Попробуйте это -(IBAction)generate { int column1Random = (arc4random() % [colum1Array count])-1; [picker selectRow:column1Random inComponent:0 animated:YES]; int column2Random = (arc4random() % [colum2Array count])-1; [picker selectRow:column2Random inComponent:1 animated:YES]; int column3Random = (arc4random() % [colum3Array count])-1; [picker selectRow:column3Random inComponent:2 animated:YES]; }

5. Хорошо, теперь это работает, но когда я запускаю, появляется только первый столбец объектов. Я могу заставить этот столбец генерировать вращение и приземляться на случайный объект. Но остальные четыре столбца пустые / пустые.