2017-04-13 1 views
0

내 프로그램에는 UIPickerView의 각 행이 첨부 된 사용자 정의보기가 있습니다. 그러나 재사용보기는 항상 제로입니다. 따라서 새로운 사용자 정의 뷰 객체가 생성 될 때마다. "재사용 뷰"는 어떻게 사용할 수 있습니까?UIPickerView의 "재사용 뷰"는 항상 nil입니다.

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

관련 문제