如何为静态 TableView 单元格点击添加操作?

How to add Action for Static TableView Cell tap?

我如何响应静态表格视图中的单元格点击?有没有办法用代码 link 它?我知道我可以使用动态的,但不能使用静态的吗?

didSelectRowAt 没有被调用

选择代码无效

class SettingsVC: UITableViewController, UITabBarControllerDelegate {

    // MARK: - View lifecycle
    override func viewDidLoad() {
        super.viewDidLoad()

        tableView.delegate = self
    }

    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        print("SELECTED") // not get called
    }
}

您需要:

  1. 将 SettingsVC 更改为 UITableViewController 的子类。
  2. 使 SettingsVC 成为 table 视图的委托,因为 tableView(_:didSelectRowAt:)UITableViewDelegate 的方法。

这可以在 UIContainerView 中使用静态 table 来完成。

这是故事板设置:

以及它在 运行 时间的样子:

当您使用 UIContainerView 时,它会创建一个 embed segue...这将触发一个 prepare 调用,您可以在其中设置 tableView 对自己的委托(如果需要)。

代码如下:

import UIKit

class EmbedTestViewController: UIViewController, UITableViewDelegate {

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

        // When using UIContainerView, prepare for segue will be called on load

        // un-comment this block to use SELF as the delegate
        //  for the tableView in the embedded tableViewController

        //if let vc = segue.destination as? MyStaticTableViewController {
        //  vc.tableView.delegate = self
        //}

    }

    // this will only be called if .delegate is set as shown above
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        print("didSelectRowAt called in \"Parent\" for indexPath:", indexPath)
    }

}

class MyStaticTableViewController: UITableViewController {

    // this will NOT be called if .delegate is set as the "parent" view controller
    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        print("didSelectRowAt called in \"Table View Controller\" for indexPath:", indexPath)
    }

}

注意 EmbedTestViewControllerprepare 函数中的注释和注释代码行。

如果你运行这个那些行注释,didSelectRowAt将在MyStaticTableViewController class。

如果你取消评论那些行,didSelectRowAt将在EmbedTestViewControllerclass.


编辑

这是一个完整的例子:https://github.com/DonMag/ContainerTableView