带有reloadData的AKPickerView导致奇怪的行为

时间:2017-03-21 15:51:36

标签: ios swift uiscrollview uicollectionview

我的库https://github.com/Akkyie/AKPickerView-Swift有一个横向AKPickerViewAKPickerView中的所选项目会显示下划线和更大的字体。

我的演示展示了到目前为止我创建的内容,可以为选择项创建下划线和更大的字体..但是我的实现会导致一些奇怪的行为。设置如下所示的项目后,其他单元格表现异常:

picker view

我认为它与reloadData和dequeuing单元格有关,但我不知道如何实现我想要的结果,是什么导致了这个错误?

代码:

import UIKit
import AKPickerView_Swift

class SystemSetupTableViewCell: UITableViewCell {

    @IBOutlet weak var questionTitle: UILabel!
    @IBOutlet weak var pickerView: AKPickerView!
    @IBOutlet weak var unitTitle: UILabel!

    fileprivate var answers: [String]!

    override func awakeFromNib() {
        super.awakeFromNib()

        pickerView.delegate = self
        pickerView.dataSource = self
    }

    func configure(questionTitle: String, answers: [String]){
        self.questionTitle.text = questionTitle
        self.answers = answers

        pickerView.font = UIFont.systemFont(ofSize: 50)
        pickerView.highlightedFont = UIFont.boldSystemFont(ofSize: 100)
        pickerView.reloadData()
    }
}

extension SystemSetupTableViewCell: AKPickerViewDataSource {
    func numberOfItemsInPickerView(_ pickerView: AKPickerView) -> Int {
        return answers.count
    }

    func pickerView(_ pickerView: AKPickerView, titleForItem item: Int) -> String {
        return answers[item]
    }
}

extension SystemSetupTableViewCell: AKPickerViewDelegate {

    func pickerView(_ pickerView: AKPickerView, configureLabel label: UILabel, forItem item: Int) {

        if pickerView.selectedItem == item {
            let underlineAttribute = [NSUnderlineStyleAttributeName: NSUnderlineStyle.styleSingle.rawValue]
            let underlineAttributedString = NSAttributedString(string: label.text!, attributes: underlineAttribute)
            label.attributedText = underlineAttributedString
        }
    }

    func pickerView(_ pickerView: AKPickerView, didSelectItem item: Int) {

        pickerView.reloadData()

        unitTitle.text = "\(answers[item]) liters"
    }
}

1 个答案:

答案 0 :(得分:0)

我通过更新库中的代码来解决此问题。

变化是:

  • 从单元格覆盖isSelected,这样单元格就会记录更改。

可在以下网址找到更多信息:https://github.com/Akkyie/AKPickerView-Swift/issues/35

SimonArcher有正确的解决方案。