如何在用户未选择任何值时保存默认UIPicker值

时间:2012-01-04 13:57:26

标签: ios uipickerview

我有一组选择器,每个选择器都有一个预选值,例如此代码显示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];
}

但是,如果他们只是在不移动选择器的情况下单击“保存”按钮,则在我的消息字段中显示为null。所以我手工编写了这段代码,将其设置为kDefaultPickerWeight,即150磅。

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

然而,是否有一些我缺少的东西或我需要做的事情才能让150磅自动存储在我的消息变量中,或者我是否必须像我一样手工编写值?

由于

2 个答案:

答案 0 :(得分:0)

如果我是你,我会使用NSUserDefaults。如果没有更改选择器值,或者甚至第一次出现选择器时,您可以从NSUserDefaults中读取。您还可以在NSUserDefaults中保存用户的输入。

如果应用程序第一次运行,您可以在应用程序委托中使用一种方法将NSUserDefaults设置为预定值。

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

答案 1 :(得分:0)

我认为这可能会对您有所帮助:

- (NSInteger)selectedRowInComponent:(NSInteger)component

您可以调用此方法来确定当前选择的行,并且不必首先与选择器进行任何用户交互。因此,如果您想在首次启动视图时找到所选行,那么您将使用该视图。

示例:

int row = [picker selectedRowInComponent:0];
NSLog(@"Selected row = %i", row);