2017-04-13 34 views
0

在我的程序中,我用UIPickerView的每一行都附加了自定義視圖。但重複使用視圖始終爲零。因此每次創建新的自定義視圖對象時。我怎樣才能使用「重用視圖」?UIPickerView的「重用視圖」始終爲零

func pickerView(_ pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusing view: UIView?) -> UIView { 
     if let vv = view { 
      return vv // This will never getting called 
     } 

     let rowSize = pickerView.rowSize(forComponent: component) 
     let pickerContentView = PickerContentView(frame: CGRect(x: 0, y: 0, width: rowSize.width, height: rowSize.height)) 
     pickerContentView.titleText = (items[Array(items.keys)[component]]! as [String])[row] as String + (component == 0 ? (row == 0 ? " MB" : " GB") : " vCPU") 
     return pickerContentView 
    } 

UIView子類

class PickerContentView: UIView { 

    // FIXME: - properties 
    var titleText: String? { 
     didSet { 
      if let titleText = self.titleText { 
       title.text = titleText 
      } 
     } 
    } 

    // FIXME: - initializer 
    override init(frame: CGRect) { 
     super.init(frame: frame) 

     setupViews() 
    } 

    required init?(coder aDecoder: NSCoder) { 
     fatalError("init(coder:) has not been implemented") 
    } 

    // FIXME: - create views 
    private let title: Label = { 
     let label = Label() 
     label.textAlignment = .center 
     label.numberOfLines = 1 
     label.font = UIFont.systemFont(ofSize: 17, weight: .regular) 
     label.textColor = UIColor(hex: 0x212121, alpha: 1) 
     label.fontSize = 17 
     label.frameHeight = 44 
     label.clipsToBounds = true 
     return label 
    }() 

    // FIXME: - define constraints 
    private func setupViews() { 
     addSubview(title) 

     // x, y, width, height => title 
     addConstraints(format: "H:|-8-[v0]-8-|", views: title) 
     addConstraints(format: "V:|[v0]|", views: title) 

     layoutIfNeeded() 
    } 
} 

回答

0

試試這個:

func pickerView(_ pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusing view: UIView?) -> UIView { 
    if let vv = view { 
     return vv // This will never getting called 
    } 

    let rowSize = pickerView.rowSize(forComponent: component) 
    let pickerContentView = PickerContentView(frame: CGRect(x: 0, y: 0, width: rowSize.width, height: rowSize.height)) 
    pickerContentView.titleText = (items[Array(items.keys)[component]]! as [String])[row] as String + (component == 0 ? (row == 0 ? " MB" : " GB") : " vCPU") 
    view?.addSubview(pickerContentView) 
    return view! 
} 
+0

謝謝你的答案,但它不工作。 – appleBoy21