2011-07-15 16 views
1

私はポップオーバーでUIPickerViewを取得しました。私は、popoverが表示される前にピッカービューのデフォルト/開始値を設定しようとしています。ここで私は(タッチアップボタンアクションを処理する方法で)ポップオーバーを作成し、表示するために使用しているコードです。デフォルトのUIPickerView値を設定しようとするとNSRangeExceptionが発生する

- (IBAction) handleClickStepTimeButton: (id)sender 
{ 
    UIViewController *timePickerController = [UIViewController alloc]; 

    UIPickerView *timePicker = [[UIPickerView alloc] initWithFrame:CGRectMake(0, 0, 100, 180)]; 
    timePicker.delegate = self; 
    timePicker.showsSelectionIndicator = YES; 
    [timePickerController.view addSubview:timePicker]; 

    UIPopoverController *timePickerPopoverController = [[UIPopoverController alloc] initWithContentViewController:timePickerController]; 
    timePickerPopoverController.popoverContentSize = CGSizeMake(100, 200); 

    UIButton *stepTimeButton = (UIButton *)sender; 

    [timePickerPopoverController presentPopoverFromRect:CGRectMake(stepTimeButton.frame.size.width, (stepTimeButton.frame.size.height/2), 1, 1) inView:stepTimeButton permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; 

    [timePicker selectRow:(currentStep.length - 1) inComponent:1 animated:YES]; 
} 

それが勝ったので、私はポップオーバーを作成する一切の懸念や、このボタンをクリックするUIPickerView各時間がありませんUIPickerViewの値が単純に少数の整数であるため、非常に頻繁に起こります。ここで私はビューに値を追加するために使用しているコードです。

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component { 
    return 8; 
} 
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)rowId forComponent:(NSInteger)component { 
    return [NSString stringWithFormat:@"%d", (rowId + 1)]; 
} 

私の問題は、私はポップオーバーを表示するために行くたびに、私は[timePicker selectRow...ライン上NSRangeExceptionを得るということです。 UIPickerViewがまだ表示されていないので、この種のことは私には意味があります。しかし、そのロジックを使って... UIPickerViewのデフォルト/開始値をどのように設定することが可能ですか?

答えて

2

チェック

私はここに簡単な解決策があると確信しているが、私はちょうどそれを見ていないよ...

おかげで、部品点数が有効であるかどうかとcurrentStep.length - 18より大きくありません。

主な問題は、ピッカーのdataSourceを設定していないことです。追加

timePicker.dataSource = self; 
+0

私は1つのコンポーネントに設定しました。 'currentStep.length - 1'は2と同じです。' UIPickerViewDataSource'を実装し、 'timePicker.dataSource = self;'を設定するクラスを設定しましたが、同じ例外が発生します。あなたはそれが初期化されていないものではないと確信していますか?意味があるように見えますが、エラーメッセージの詳細に '結界を超えたインデックス1 [0 .. 0]'と表示され、その結論に至ります。その他の提案はありますか? – user700774

+1

問題が見つかりました。コンポーネントは0でインデックス付けされます。私はそれを '[timePicker selectRow:(currentStep.length - 1)inComponent:0 animated:YES];に変更し、それはうまく動作します。 – user700774

関連する問題