#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 индекс, который вы ищете? Кроме того, вы сохранили последний выбранный индекс?