UIPickerView コンポーネントで一連の連続した数字を表示したいのですが、Clock->Timer アプリケーションの秒コンポーネントのようにラップします。私が有効にできる唯一の動作は、一方向にしかスクロールできないタイマー アプリケーションの時間コンポーネントのように見えます。
David
質問する
25179 次
3 に答える
47
行数を大きな数に設定し、高い値から開始するのも同じくらい簡単です。ユーザーが非常に長い間ホイールをスクロールする可能性はほとんどありません。それでも、さらに悪いことになります。起こるのは彼らが底を打つということです。
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {
// Near-infinite number of rows.
return NSIntegerMax;
}
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {
// Row n is same as row (n modulo numberItems).
return [NSString stringWithFormat:@"%d", row % numberItems];
}
- (void)viewDidLoad {
[super viewDidLoad];
self.pickerView = [[[UIPickerView alloc] initWithFrame:CGRectZero] autorelease];
// ...set pickerView properties... Look at Apple's UICatalog sample code for a good example.
// Set current row to a large value (adjusted to current value if needed).
[pickerView selectRow:currentValue+100000 inComponent:0 animated:NO];
[self.view addSubview:pickerView];
}
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {
NSInteger actualRow = row % numberItems;
// ...
}
于 2008-12-15T03:56:29.493 に答える
22
ここで私の答えを見つけました:
http://forums.macrumors.com/showthread.php?p=6120638&highlight=UIPickerView#post6120638
行のタイトルを尋ねられたら、次のように入力します: コード:
return [rows objectAtIndex:(row % [rows count])];
ユーザーが didSelectRow:inComponent: と言うときは、次のようなものを使用します。
コード:
//we want the selection to always be in the SECOND set (so that it looks like it has stuff before and after)
if (row < [rows count] || row >= (2 * [rows count]) ) {
row = row % [rows count];
row += [rows count];
[pickerView selectRow:row inComponent:component animated:NO];
}
UIPickerView はネイティブでラップ アラウンドをサポートしていないようですが、表示するデータ セットをさらに挿入し、ピッカーが停止したときに、コンポーネントをデータ セットの中央に配置することでだますことができます。
于 2008-10-21T13:51:23.853 に答える