UIPickerViewコンポーネントをどのようにラップアラウンドさせますか?

StackOverflow https://stackoverflow.com/questions/214441

  •  03-07-2019
  •  | 
  •  

質問

UIPickerViewコンポーネントに連続した数字のセットを表示したいのですが、Clock-> Timerアプリケーションのsecondsコンポーネントのようにラップアラウンドさせます。私が有効にできる唯一の動作は、一方向にのみスクロールできるTimerアプリケーションの時間コンポーネントのように見えます。

役に立ちましたか?

解決

行の数を大きな数に設定し、高い値から開始するのと同じくらい簡単です。ユーザーが非常に長い時間ホイールをスクロールする可能性はほとんどありません。さらに悪いことに、彼らは底を打つということです。

- (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;
    // ...
}

他のヒント

ここで答えを見つけました:

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];
}
U

配列を複数回作成するだけで、番号が複数回得られます。 0から23までの数字を取得し、それを配列に入れたい場合を考えましょう。私たちはこのように10回行うことを...

NSString *stdStepper;

    for (int j = 0; j<10; j++) {
        for(int i=0; i<24; i++)
        {
            stdStepper = [NSString stringWithFormat:@"%d", i];

            [_hoursArray addObject:stdStepper];

        }
    }

このように選択された行0を設定します

[_hoursPickerView selectRow:120 inComponent:0 animated:NO];

すべての答えは、ピッカービューを周期的にスクロールさせるわけではありません。

UIScrollView に基づいて周期的なtableViewを作成しました。そして、このtableViewに基づいて、 UIPickerView を再実装します。この DLPickerView に興味があるかもしれません。また、このピッカービューには UIPickerView のすべての機能がありますが、多くの新機能も提供され、このピッカービューのカスタマイズははるかに簡単です。

https://github.com/danleechina/DLPickerView

この DLPickerView の周期的スクロールは実際に周期的にスクロールしていることに注意してください。すべての魔法は、別のクラス DLTableView が原因で発生しました。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top