![](/img/trans.png)
[英]The method selectRow(at:animated:scrollPosition:) doesn't call tableView(_:didSelectRowAt:)
[英]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.