0
複数のUIPickerView
をUITableView
に実装しようとすると、各行に独立したUIPickerView
が含まれます。問題は、私が1つの値を変更するときですPickerView
、それは自動的に他の行にも変更されますが、時には変更されません。TableView内で複数のPickerViewを実装する
しかし、私はそれぞれUITableViewCell
のために独立したUIPickerView
を持っていることを望みます。
カスタムセル
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 "
}
}
オーバーライドのUITableViewCellでprepareForReuse方法は、私は、各UITableViewCellのためundependent UIPickerViewが必要であることを言及するのを忘れてしまったUIPickerView – KrishnaCA
@Chaitanyaは申し訳ありませんリセットします。しかし、私はそうすることができません。 –
カスタムtableviewcellを作成すると、セルが再利用されます。そういうわけで、あなたはこの行動を取っているのです。 UITableViewCellごとに独立したUIPickerViewを取得するには、override func prepareForReuse()を使用してUIPickerViewをリセットまたは再初期化する必要があります。 – KrishnaCA