2016-05-04 31 views
0

複数のUIPickerViewUITableViewに実装しようとすると、各行に独立したUIPickerViewが含まれます。問題は、私が1つの値を変更するときですPickerView、それは自動的に他の行にも変更されますが、時には変更されません。TableView内で複数のPickerViewを実装する

しかし、私はそれぞれUITableViewCellのために独立したUIPickerViewを持っていることを望みます。

enter image description hereenter image description here

enter image description here

カスタムセル

class PrayerCell: UITableViewCell, UIPickerViewDataSource, UIPickerViewDelegate { 

    @IBOutlet var detailView: UIView! 
    @IBOutlet var name: UILabel! 
    @IBOutlet var time: UILabel! 
    @IBOutlet var pickerView: UIPickerView! 
    @IBOutlet var toggleAlarm: UISwitch! 

    var isObserving = false; 


    class var expandedHeight: CGFloat { 
     get { 
      return 200 
     } 
    } 

    class var defaultHeight: CGFloat { 
     get { 
      return 44 
     } 
    } 

    func checkHeight() { 
     detailView.hidden = (frame.size.height < PrayerCell.expandedHeight) 
    } 
    override func awakeFromNib() { 
     super.awakeFromNib() 

     self.pickerView.delegate = self 
     self.pickerView.dataSource = self 
    } 

    override func setSelected(selected: Bool, animated: Bool) { 
     super.setSelected(false, animated: false) 
    } 

    func watchFrameChanges() { 
     if !isObserving { 
      addObserver(self, forKeyPath: "frame", options: [.New, .Initial], context: nil) 
      isObserving = true; 
     } 
    } 

    func ignoreFrameChanges() { 
     if isObserving { 
      removeObserver(self, forKeyPath: "frame") 
      isObserving = false; 
     } 
    } 

    override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) { 
     if keyPath == "frame" { 
      checkHeight() 
     } 
    } 

    let pickerData = [15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0] 

    func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int { 
     return 1 
    } 

    func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { 
     return pickerData.count 
    } 

    func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { 
     return String(pickerData[row]) 
    } 

    func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { 
     print(row) 
     updateLabel() 
    } 

    func updateLabel(){ 
     // let value = pickerData[pickerView.selectedRowInComponent(0)] 
     // minsBeforeLabel.text = String(value) + " Minutes Before " 
    } 
} 
+0

オーバーライドのUITableViewCellでprepareForReuse方法は、私は、各UITableViewCellのためundependent UIPickerViewが必要であることを言及するのを忘れてしまったUIPickerView – KrishnaCA

+0

@Chaitanyaは申し訳ありませんリセットします。しかし、私はそうすることができません。 –

+0

カスタムtableviewcellを作成すると、セルが再利用されます。そういうわけで、あなたはこの行動を取っているのです。 UITableViewCellごとに独立したUIPickerViewを取得するには、override func prepareForReuse()を使用してUIPickerViewをリセットまたは再初期化する必要があります。 – KrishnaCA

答えて

0

あなたが何をしたいの以下のオープンソース実装を使用します。

Bohr

関連する問題