繁体   English   中英

在TableView中实现多个PickerView

[英]Implementing Multiple PickerView inside TableView

我试图在UITableView内实现Multiple UIPickerView ,每行将包含一个独立的UIPickerView 问题是,当我在一个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 "
    }
}

使用以下所需的开源实现。

玻尔

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM