Не удается выяснить, как установить начальные значения для UIPickerView

#ios

#iOS

Вопрос:

Я использую a UIPickerView и хотел бы, чтобы раздел был таким же, как в прошлый раз, когда он использовался. Я просмотрел документы Apple по этому вопросу, но не увидел ничего о настройке разделов.

мой код

 - (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    // Initialize Data
    _pickerData = @[@"I", @"2", @"3", @"4", @"5", @"6", @"7", @"8", @"9"];

    // Connect data
    picker.dataSource = self;
    picker.delegate = self;

}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

/*
#pragma mark - Navigation

// In a storyboard-based application, you will often want to do a little preparation before navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    // Get the new view controller using [segue destinationViewController].
    // Pass the selected object to the new view controller.
}
*/
- (IBAction)aOk:(id)sender {
    [self.navigationController popViewControllerAnimated:YES];

    // store data
    int i=0;
    i=[picker selectedRowInComponent:1]*10;
    i =[picker selectedRowInComponent:1];
}
- (IBAction)aCancel:(id)sender {
    [self.navigationController popViewControllerAnimated:YES];
}




// The number of columns of data
- (int)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{
    return 2;
}

// The number of rows of data
- (int)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
    // compment contains the col number
    return _pickerData.count;
}

// The data to return for the row and component (column) that's being passed in
- (NSString*)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
    return _pickerData[row];
}

// Catpure the picker view selection
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
    // This method is triggered whenever the user makes a change to the picker selection.
    // The parameter named row and component represents what was selected.
}


@end
 

Ответ №1:

Да, у меня была такая же проблема при разработке моей викторины. Вот как я решил эту проблему.

После того, как вы загрузили свои данные, используйте это выберите строку:

 UIPickerView * pickerView = [[UIPickerView alloc] initWithFrame:rect];
[pickerView setDelegate:self];
[pickerView setDataSource:self];
[view addSubview:pickerView];

//We're going to select a row with this line
[pickerView selectRow:[_pickerData objectAtIndex:0] inComponent:0 animated:YES];
 

Я вижу, вы сказали, что хотели бы, чтобы в pickerView по умолчанию использовалась последняя выбранная строка (я думаю, это то, что вы пытаетесь сказать)?

Если это так, я бы просто сохранил последнюю выбранную строку в NSUserDefaults (которая сохраняется, даже если пользователь убивает приложение).

Всякий раз, когда пользователь переходит к представлению выбора, вы можете сделать что-то вроде этого:

 NSInteger lastSelectedRow = [[NSUserDefaults standardUserDefaults] integerForKey:@"lastSelectedRow"];
if (lastSelectedRow)
    [pickerView selectRow:lastSelectedRow inComponent:0 animated:YES];
else
    [pickerView selectRow:[_pickerData objectAtIndex:0] inComponent:0 animated:YES];
 

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

1. Я не могу заставить его работать, просто остается в исходном коде позиции

2. Поставьте точку останова в операторе if … то есть if (lastSelectedRow). Имеет ли переменная lastSelectedRow индекс, который вы ищете? Кроме того, вы сохранили последний выбранный индекс?