2016-10-16 31 views
1

據蘋果API引用在此方法中UIPickerView重用視圖總是爲零

optional func pickerView(_ pickerView: UIPickerView, 
      viewForRow row: Int, 
     forComponent component: Int, 
      reusing view: UIView?) -> UIView 

重用視圖由選擇器視圖緩存看法,但是當我試圖使用它的下一行,它總是零,而我當重複使用視圖爲零時,返回UILabel。問題是什麼? 這是我的實現:

func pickerView(_ pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusing view: UIView?) -> UIView { 
    let pickerLabel = UILabel() 
    pickerLabel.textColor = UIColor.black 
    pickerLabel.text = "10" 
    pickerLabel.textAlignment = NSTextAlignment.center 
    pickerLabel.sizeToFit() 
    return pickerLabel 
} 
+0

更新您的問題與您完全實施此方法。 – rmaddy

+0

文章編輯@maddy –

+0

如果提供了'view',你試圖使用哪個? – rmaddy

回答

5

您的代碼不會嘗試使用重用視圖。您的代碼應該是這樣的:

func pickerView(_ pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusing view: UIView?) -> UIView { 
    var pickerLabel : UILabel 
    if let label = view as? UILabel { 
     pickerLabel = label 
    } else { 
     pickerLabel = UILabel() 
     pickerLabel.textColor = UIColor.black 
     pickerLabel.textAlignment = NSTextAlignment.center 
    } 

    pickerLabel.text = "10" 
    pickerLabel.sizeToFit() 

    return pickerLabel 
} 

如果重用視圖是標籤,此代碼會重用標籤。否則,它會創建並設置一個新標籤。

請注意,選取器只會在選取器視圖滾動時通過重用視圖。它類似於表格視圖的單元重用。

+0

當我在該函數中寫入print(view)時,它總是打印nil。所以它永遠不會去if語句 –

+0

選擇器視圖中有多少行?您在滾動選取器視圖時是否檢查'view'? – rmaddy

+1

我已經添加了50個假行,是的,我正在滾動,每次打印無 –