#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. Хорошо, теперь это работает, но когда я запускаю, появляется только первый столбец объектов. Я могу заставить этот столбец генерировать вращение и приземляться на случайный объект. Но остальные четыре столбца пустые / пустые.