簡體   English   中英

didSelectRowAt不會影響cellForRowAt

[英]didSelectRowAt doesn't affect cellForRowAt

我試圖按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
    }

}

當您更新ListItem時,它是一個結構,它不會在列表上更新,因為總是會復制該結構。 我認為您應該執行以下操作:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM