选择可重用的TableView单元格时索引超出范围

时间:2019-09-18 17:52:02

标签: swift uitableview

我有以下课程来跟踪在表视图中选择的所有单元格,问题是我不断收到错误的索引超出范围:

self!.myModels[indexPath.row].isSelected ? self?.selectRow(indexPath) : self?.unselectRow(indexPath)

是什么原因造成的?只要载入tableView,就会发生此问题。

其余代码:

class CheckableTableViewCell: UITableViewCell {
    var handler: ((Bool)->())?

    override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
        super.init(style: style, reuseIdentifier: reuseIdentifier)
        self.selectionStyle = .none
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
    }

    override func setSelected(_ selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)
        self.accessoryType = selected ? .checkmark : .none
        handler?(selected) 
            }
}

class TableViewController: UITableViewController {

    private var myModels: [MyModel] = [MyModel(isSelected: false),MyModel(isSelected: true),MyModel(isSelected: true),MyModel(isSelected: false) ]

var sections = [Section]()
var structure = [Portfolios]()




    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! CheckableTableViewCell
        cell.handler = {[weak self] selected in
            self?.myModels[indexPath.row].isSelected = selected
        }
        let section = sections[indexPath.section]
                let item = section.items[indexPath.row]
                cell.textLabel?.textAlignment = .left
                cell.selectionStyle = .none

                let titleStr = "\(item.code)
                cell.textLabel!.text = titleStr

        return cell
    }

    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        let selectedIndexPath = indexPath.row
        myModels[selectedIndexPath].isSelected = true
        self.tableView.reloadRows(at: [indexPath], with: .none)

    }

部分定义了以下tableView结构:

struct Section {
    let name : String
    var items : [Portfolios]
}

struct Portfolios: Decodable {

    let code: String

    enum CodingKeys : String, CodingKey {
        case code
    }

}

0 个答案:

没有答案
相关问题