如何为静态TableView单元格水龙头添加动作?

时间:2020-03-23 20:33:40

标签: ios swift iphone xcode uitableview

我该如何响应静态tableview中的单元格抽头?有没有办法将其与代码链接?我知道我可以使用动态的,但静态的不是吗?

didSelectRowAt没有被呼叫 enter image description here

选择无效代码

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
    }
}

2 个答案:

答案 0 :(得分:1)

您需要:

  1. 将SettingsVC更改为UITableViewController的子类。
  2. 由于tableView(_:didSelectRowAt:)UITableViewDelegate的一种方法,因此可以使SettingsVC成为表视图的委托。

答案 1 :(得分:1)

这可以通过使用UIContainerView中的静态表来完成。

这是情节提要板设置:

enter image description here

及其运行时的外观:

enter image description here

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

这是代码:

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)
    }

}

请注意prepareEmbedTestViewController函数中的注释和注释行。

如果运行这些 并注释了这些行,则didSelectRowAt将在MyStaticTableViewController类中被调用。

如果您 取消注释 这些行,将在didSelectRowAt类中调用EmbedTestViewController


编辑

下面是一个完整的示例:https://github.com/DonMag/ContainerTableView