Как сохранить значение UIPicker по умолчанию, когда пользователь не выбирает значение - PullRequest
0 голосов
/ 04 января 2012

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

arrayPickerWeight = [[NSMutableArray alloc] initWithCapacity:100];
for ( int i = 80 ; i <= 360 ; i+=10 ) {
    [arrayPickerWeight addObject:[NSString stringWithFormat:@"%i", i]];
}   

// Calculate the screen's width.
float screenWidth = [UIScreen mainScreen].bounds.size.width;
float pickerWidth = screenWidth * 3 / 4;
// Calculate the starting x coordinate.
float xPoint = screenWidth / 2 - pickerWidth / 2;
pickerView = [[UIPickerView alloc] init];
// Set the delegate and datasource. 
[pickerView setDataSource: self];
[pickerView setDelegate:   self];
// Set the picker's frame to 50px.
[pickerView setFrame: CGRectMake(xPoint, 50.0f, pickerWidth, 180.0f)];
pickerView.showsSelectionIndicator = YES;
// Set the default value to be displayed
[pickerView selectRow:7 inComponent:0 animated:YES];
[self.view addSubview: pickerView];
[pickerView reloadAllComponents];

Все работает нормально, если пользователь выбирает значение. Этот метод вызывается, как и ожидалось:

- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component 
{
    message = [arrayPickerWeight objectAtIndex:row];
}

Однако, если они просто нажимают кнопку сохранения, не перемещая средство выбора, я получаю нулевое значение в поле своего сообщения. Поэтому я вручную написал этот код, чтобы установить для него значение kDefaultPickerWeight, которое составляет 150 фунтов.

//if picker value is null then populate with default shown    
if ([message length] == 0)
{
    message = [NSString stringWithFormat:@"%d",kDefaultPickerWeight];
}

Однако есть ли что-то, чего мне не хватает, или что-то, что мне нужно сделать, чтобы автоматически сохранить 150 фунтов в моей переменной сообщения, или мне нужно вручную кодировать значение, как я?

Спасибо

Ответы [ 2 ]

0 голосов
/ 29 февраля 2012

Я думаю, что это может вам помочь:

- (NSInteger)selectedRowInComponent:(NSInteger)component

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

Пример:

int row = [picker selectedRowInComponent:0];
NSLog(@"Selected row = %i", row);
0 голосов
/ 04 января 2012

На вашем месте я бы использовал NSUserDefaults. Если значение средства выбора не изменилось или даже когда оно появляется впервые, вы можете прочитать из NSUserDefaults. Вы также можете сохранить пользовательский ввод в NSUserDefaults.

Если приложение запускается в первый раз, в делегате приложения может быть метод для установки NSUserDefaults на предопределенное значение.

http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSUserDefaults_Class/Reference/Reference.html

...