我该如何响应静态tableview中的单元格抽头?有没有办法将其与代码链接?我知道我可以使用动态的,但静态的不是吗?
选择无效代码
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
}
}
答案 0 :(得分:1)
您需要:
UITableViewController
的子类。tableView(_:didSelectRowAt:)
是UITableViewDelegate
的一种方法,因此可以使SettingsVC成为表视图的委托。答案 1 :(得分:1)
这可以通过使用UIContainerView
中的静态表来完成。
这是情节提要板设置:
及其运行时的外观:
当您使用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)
}
}
请注意prepare
中EmbedTestViewController
函数中的注释和注释行。
如果运行这些 并注释了这些行,则didSelectRowAt
将在MyStaticTableViewController
类中被调用。
如果您 取消注释 这些行,将在didSelectRowAt
类中调用EmbedTestViewController
。
编辑
下面是一个完整的示例:https://github.com/DonMag/ContainerTableView