デフォルトのピッカー値iphone
-
06-07-2019 - |
質問
ピッカーのデフォルト値を設定する方法はありますか?すべてのピッカーから最後に選択した行を保存し、起動時にそれらの保存した行をピッカーにロードできるようにしたいと思います。今のところ、私はこのコードを見つけました:
[settingsPagePicker selectRow:3 inComponent:0 animated:YES];
これは機能しますが、ユーザーがピッカーをタップした場合のみです。アプリが最初にロードされたときに動作する必要があります。このコードをviewDidLoadに配置すると、アプリがクラッシュします。 これを機能させるためにコードのどこにこれを置くのが適切な場所ですか?
お時間をいただきありがとうございます!
解決
-selectRow:inComponent:animatedを呼び出す前にsettingsPagePickerのデータソースをチェックして、そのインデックス(サンプルコードでは3)にデータがあることを確認しましたか?
データソースのデータをどのようにロードしていますか?最初にviewDidLoadでデータソースを初期化し、使用可能なデータがあることがわかったらselectRowを呼び出します。
更新:コードは次のようになります:
- (void)viewDidLoad
{
[super viewDidLoad];
pickerDataSource = [[NSMutableArray alloc] init];
[pickerDataSource addObject:@"Item 01"];
[pickerDataSource addObject:@"Item 02"];
[pickerDataSource addObject:@"Item 03"];
[pickerDataSource addObject:@"Item 04"];
// Might want to move this to -viewWillAppear:animated
[settingsPagePicker selectRow:3 inComponent:0 animated:YES];
}
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
if (pickerView == settingsPagePicker)
{
return [pickerDataSource objectAtIndex:row];
}
return @"";
}
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
if (pickerView == settingsPagePicker)
{
return [pickerDataSource count];
}
return 0;
}
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)thePickerView
{
return 1;
}
他のヒント
ここに私のクラスのいくつかのメソッド。
- (void)viewDidLoad { [super viewDidLoad]; currentNumbersOfComponents = 1; //[picker selectRow:2 inComponent:0 animated:NO]; }
- (void) viewDidAppear:(BOOL)animated{
[super viewDidAppear:animated];
[picker selectRow:2 inComponent:0 animated:YES];
}
#pragma mark picker view data source methods
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{
return currentNumbersOfComponents;
}
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{
return 5;
}
picker.dataSourceはself
所属していません StackOverflow