你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發基礎 >> 如何自定義 UIPickerView 的行?

如何自定義 UIPickerView 的行?

編輯:IOS開發基礎

beverage-498315_640.jpg

UIPickerView的主要內容實際上並不多,主要是一個UIPickerView類和對應的UIPickerViewDelegate,UIPickerViewDataSource協議,分別表示代理和數據源。在此不細說這些,只是解答我們遇到的一個小需求。

通常,UIPickerView是可以定義多列內容的,比如年、月、日三列,這些列之間相互不干擾,可以自已滾自己的,不礙別人的事。不過,我們有這麼一個需求,也是有三列,但這三列需要一起滾。嗯,這個就需要另行處理了。

在UIPickerViewDelegate中,聲明了下面這樣一個代理方法:

- (UIView *)pickerView:(UIPickerView *)pickerView
        viewForRow:(NSInteger)row
      forComponent:(NSInteger)component
       reusingView:(UIView *)view

我們通過這個方法就可以來自定義行的視圖。時間不早,廢話就不多說了,直接上代碼吧:

- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view {
    PickerViewCell *pickerCell = (PickerViewCell *)view;
    if (!pickerCell) {
        NSInteger column = 3;
        pickerCell = [[PickerViewCell alloc] initWithFrame:(CGRect){CGPointZero, [UIScreen mainScreen].bounds.size.width, 45.0f} column:column];
    }
    [pickerCell setLabelTexts:@[...]];
    return pickerCell;
}

我們定義了一個PickerViewCell視圖,裡面根據我們的傳入的column參數來等分放置column個UILabel,並通過setLabelTexts來設置每個UILabel的文本。當然,我們也可以在PickerViewCell去定義UILabel的外觀顯示。就是這麼簡單。

不過,還有個需要注意的就是,雖然看上去是顯示了3列,但實際上是按1列來處理的,所以下面的實現應該是返回1:

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {
    return 1;
}

參考

  1. UIPickerViewDelegate Protocol Reference

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved