1

ピッカーのデフォルト値を設定する方法はありますか? すべてのピッカーから最後に選択した行を保存し、ピッカーが起動時にそれらの保存された行をロードできるようにしたいと考えています。今のところ、私はこのコードを見つけました:

[settingsPagePicker selectRow:3 inComponent:0 animated:YES];

ユーザーがピッカーをタップした場合にのみ機能します。アプリが最初にロードされたときに動作する必要があります。このコードを viewDidLoad に配置すると、アプリがクラッシュします。これを機能させるためにコードにこれを配置する適切な場所を知っている人はいますか?

お時間をいただきありがとうございます!

4

2 に答える 2

6

-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;
}
于 2009-10-26T17:29:48.763 に答える
2

ここに私のクラスのいくつかのメソッドがあります。

- (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 は自己です

于 2009-10-26T17:15:17.063 に答える