didSelectRowAt不会影响cellForRowAt

时间:2017-02-06 20:13:37

标签: ios swift uitableview

我在按下UITabelViewCell时尝试获取不同的标签文字,但我无法使其正常工作。默认值completed为false,触摸时应为true,然后应更改标签。在didSelectRowAt内部,completed值不同,所以它很好,但我无法将其传递给cellForRowAt。

import UIKit

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

    var listItems : [ListItem] = []

    @IBOutlet weak var plusButton: UIButton!
    @IBOutlet weak var tableView: UITableView!

    override func viewDidLoad() {
    //...
    }


    func numberOfSections(in tableView: UITableView) -> Int {
        return 1
    }

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return listItems.count
    }

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        var item = listItems[indexPath.row]

        item.completed = !item.completed // changing from true to false and rom false to true
        tableView.reloadData()
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        if let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as? CellData{
            let item = listItems[indexPath.row]
            cell.nameLabel.text = item.name
            cell.userLabel.text = item.addedBy

            if(item.completed == true){ //didSelectRowAt doesn't affect this item.completed
                cell.doneLabel.text = "done"
            } else {
                cell.doneLabel.text = "not"
            }
            return cell
        } else{
            return CellData()
        }
    }
}

ListItem.swift:

struct ListItem{
    var name : String!
    var addedBy : String!
    var completed : Bool!

    init(name: String, addedBy: String, completed: Bool){
        self.name = name
        self.addedBy = addedBy
        self.completed = completed
    }

}

1 个答案:

答案 0 :(得分:3)

当您更新它时,您的ListItem是一个结构,它不会在列表上更新,因为始终会复制结构。 我认为你应该这样做:

<IfModule mod_php7.c>