【问题标题】:Value of type '_' has no member'_' 类型的值没有成员
【发布时间】:2017-05-01 00:53:38
【问题描述】:

在 cellForRowAt 下的 cb.check(self.rowChecked[indexPath.row]) 行中,我得到一个“'LolFirstTableViewController' 类型的值没有成员 'rowChecked'”,即使我将 rowChecked 设置为一个数组带有 tasks.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)
    }

【问题讨论】:

    标签: ios arrays uitableview


    【解决方案1】:

    您将rowChecked 声明为局部变量,并使用self.rowChecked 调用它,就好像它是一个类属性一样。

    要解决此问题,请删除rowChecked 之前的self.

    旧:

    cb.check(self.rowChecked[indexPath.row])
    

    新功能:

    cb.check(rowChecked[indexPath.row])
    

    可能还有其他问题,但这就是您的代码当前存在的错误的原因。

    【讨论】:

      【解决方案2】:

      你在tableView:cellForRowAt 方法中有一行:var rowChecked: [Bool] = Array(repeating: false, count: tasks.count),所以它是一个局部变量,它不是LolFirstTableViewController 类的属性。

      这意味着您需要将这一行:cb.check(self.rowChecked[indexPath.row]) 更改为 cb.check(rowChecked[indexPath.row])(已删除 self.)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-04-07
        • 2016-03-11
        • 1970-01-01
        • 1970-01-01
        • 2021-06-17
        • 2018-01-15
        • 2017-04-28
        • 2016-12-03
        相关资源
        最近更新 更多