在cellForRowAt下的cb.check(self.rowChecked [indexPath.row])行中,尽管我将rowChecked设置为具有以下内容的布尔数组,但我得到的是“LolFirstTableViewController类型的值没有成员'rowChecked'” task.count项目数。我需要在cellForRowAt之外的其他地方初始化rowChecked还是在这里做错什么?这段代码的重点是在表格的每个单元格中显示一个复选框,您可以单击该复选框以将附件更改为选中标记,然后再次单击以将其取消选中。复选框本身是一个单独的自定义类,称为CheckButton。我仍在学习Swift,因此任何帮助将不胜感激!谢谢!
import UIKit
class LoLFirstTableViewController: UITableViewController {
var tasks:[Task] = taskData
override func viewDidLoad() {
super.viewDidLoad()
tableView.rowHeight = UITableViewAutomaticDimension
tableView.estimatedRowHeight = 60.0
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
override func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return tasks.count
}
@IBAction func cancelToLoLFirstTableViewController(_ segue:UIStoryboardSegue) {
}
@IBAction func saveAddTask(_ segue:UIStoryboardSegue) {
if let AddTaskTableViewController = segue.source as? AddTaskTableViewController {
if let task = AddTaskTableViewController.task {
tasks.append(task)
let indexPath = IndexPath(row: tasks.count-1, section: 0)
tableView.insertRows(at: [indexPath], with: .automatic)
}
}
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "TaskCell", for: indexPath) as! TaskCell
let task = tasks[indexPath.row]
cell.task = task
var rowChecked: [Bool] = Array(repeating: false, count: tasks.count)
if cell.accessoryView == nil {
let cb = CheckButton()
cb.addTarget(self, action: #selector(buttonTapped(_:forEvent:)), for: .touchUpInside)
cell.accessoryView = cb
}
let cb = cell.accessoryView as! CheckButton
cb.check(self.rowChecked[indexPath.row])
return cell
}
func buttonTapped(_ target:UIButton, forEvent event: UIEvent) {
guard let touch = event.allTouches?.first else { return }
let point = touch.location(in: self.tableView)
let indexPath = self.tableView.indexPathForRow(at: point)
var tappedItem = tasks[indexPath!.row] as Task
tappedItem.completed = !tappedItem.completed
tasks[indexPath!.row] = tappedItem
tableView.reloadRows(at: [indexPath!], with: UITableViewRowAnimation.none)
}
最佳答案
您将rowChecked
声明为局部变量,并使用self.rowChecked
对其进行调用,就好像它是类属性一样。
要解决此问题,请在self.
之前删除rowChecked
。
旧版:
cb.check(self.rowChecked[indexPath.row])
新功能:
cb.check(rowChecked[indexPath.row])
可能还会有其他问题,但这就是导致错误的原因,因为您的代码目前仍然存在。
关于ios - 类型“_”的值没有成员,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43712911/