不工作委托 UITableViewController

问题描述

我以编程方式创建了 UITableViewController,但是删除行的方法editingStyle 和 didSelectRowAt 不起作用。我无法弄清楚为什么它们不起作用。我检查了一切并尝试了无论如何委托方法不起作用。

我的代码

import UIKit

class FPTasksViewController: UITableViewController,FPPopUpViewControllerDelegate {

    let date = String(DateFormatter.localizedString(from: NSDate() as Date,dateStyle: .long,timeStyle: .none))

    private var tasks: [FPTask] = FPDefaults.sh.tasks {
        didSet {
            FPDefaults.sh.tasks = self.tasks
        }
    }

    // MARK: - life cycle functions

    override func viewDidLoad() {
        super.viewDidLoad()

        self.tableView.separatorStyle = .none

        let tapGestureRecognizer = UILongPressGestureRecognizer(target: self,action: #selector(didTapTableView))

        tableView.addGestureRecognizer(tapGestureRecognizer)
    }

    // MARK: - actions

    func FPPopUpViewControllerOkButtonTapped(_ controller: FPPopUpViewController,didFinishAdding newTask: FPTask) {
        let newRowIndex = tasks.count
        self.tasks.append(newTask)

        let indexPath = IndexPath(row: newRowIndex,section: 0)

        tableView.insertRows(at: [indexPath],with: .automatic)
        navigationController?.popViewController(animated: true)
    }

    @objc func addButtonTapped() {
        let popUp = FPPopUpViewController()
        popUp.delegate = self

        self.view.addSubview(popUp)

        self.view.backgroundColor = UIColor.systemGray3.withAlphaComponent(0.8)
    }

    @objc func didTapTableView(_ gestureRecognizer: UILongPressGestureRecognizer) {
        self.tableView.backgroundColor = .black
    }

    // MARK: - table view

    override func tableView(_ tableView: UITableView,commit editingStyle: UITableViewCell.EditingStyle,forRowAt indexPath: IndexPath) {
        switch editingStyle {
        case .delete:
            self.tasks.remove(at: indexPath.row)
            tableView.deleteRows(at: [indexPath],with: .fade)
        default:
            break
        }
    }

    override func tableView(_ tableView: UITableView,numberOfRowsInSection section: Int) -> Int {

        return self.tasks.count
    }

    override func tableView(_ tableView: UITableView,cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: FPTasksCell.reuseIdentifier,for: indexPath) as? FPTasksCell ?? FPTasksCell()

        let task = tasks[indexPath.row]

        cell.setCellData(taskName: "  \(task.taskTitle)",taskDescription: "  from \(date.lowercased())")

        return cell
    }
    
    override func tableView(_ tableView: UITableView,didSelectRowAt indexPath: IndexPath) {
        print(1)
    }
}

为什么我不能删除行?以及如何使 didSelectRowAt 方法也起作用?我做错了什么?

解决方法

在 viewDidLoad 方法中设置 tableView 数据源和委托。

self.tableView.delegate = self
self.tableView.dataSource = self
,
class FPTasksViewController: UITableViewController,FPPopUpViewControllerDelegate,UITableViewDataSource,UITableViewDelegate {
    
         override func viewDidLoad() {
            super.viewDidLoad()
            // Do any additional setup after loading the view.
    
             self.tableView.delegate = self
             self.tableView.dataSource = self
        }
    
    }