我有一组选择器,每个选择器都有一个预选值,例如此代码显示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磅自动存储在我的消息变量中,或者我是否必须像我一样手工编写值?
由于
答案 0 :(得分:0)
如果我是你,我会使用NSUserDefaults。如果没有更改选择器值,或者甚至第一次出现选择器时,您可以从NSUserDefaults中读取。您还可以在NSUserDefaults中保存用户的输入。
如果应用程序第一次运行,您可以在应用程序委托中使用一种方法将NSUserDefaults设置为预定值。
答案 1 :(得分:0)
我认为这可能会对您有所帮助:
- (NSInteger)selectedRowInComponent:(NSInteger)component
您可以调用此方法来确定当前选择的行,并且不必首先与选择器进行任何用户交互。因此,如果您想在首次启动视图时找到所选行,那么您将使用该视图。
示例:
int row = [picker selectedRowInComponent:0];
NSLog(@"Selected row = %i", row);