2012-01-04 13 views
0

私は、このコードのように予め選択された値を持つピッカーのセットを持っています:ユーザーが値を選択しないときにデフォルトのUIPicker値を保存する方法

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

を試みた '場合(メッセージ== NIL){...}'? – pmk

+0

メッセージの長さをチェックすることで効果的だと思います。私は、UIPickerに関連する自然な振る舞いやメソッドに関して、nullであるかどうかを確認することなく、受信変数に格納された事前選択値を取得する方法があるかどうか疑問に思っていました。ありがとう – Jazzmine

答えて

0

私があなただったら、私はNSUserDefaultsを使用します。ピッカー値が変更されていない場合、またはピッカーが最初に表示された場合でも、NSUserDefaultsから読み取ることができます。 NSUserDefaultsにユーザーの入力を保存することもできます。

初めてアプリが実行されている場合は、アプリデリゲートのメソッドでNSUserDefaultsを事前定義済みの値に設定することができます。

- (NSInteger)selectedRowInComponent:(NSInteger)component 

あなたが現在選択されている行を把握するために、このメソッドを呼び出すことができますし、最初のピッカーを持つすべてのユーザーとの対話があることがありません。私は、これはあなたを助けるかもしれないと思う

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

+0

ありがとうCanopus - NSUserDefaultsを調べます。私はそのアプローチを考慮していません。前回NSDefaultとして選んだものを保存することができるのが好きです。 – Jazzmine

0

。そのため、最初にビューを起動したときに選択した行を探したい場合は、その行を使用します。

例:

int row = [picker selectedRowInComponent:0]; 
NSLog(@"Selected row = %i", row); 
関連する問題