如何为静态 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
}
}
您需要:
- 将 SettingsVC 更改为
UITableViewController
的子类。
- 使 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)
}
}
注意 EmbedTestViewController
中 prepare
函数中的注释和注释代码行。
如果你运行这个和那些行注释,didSelectRowAt
将在MyStaticTableViewController
class。
如果你取消评论那些行,didSelectRowAt
将在EmbedTestViewController
class.
编辑
我如何响应静态表格视图中的单元格点击?有没有办法用代码 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
}
}
您需要:
- 将 SettingsVC 更改为
UITableViewController
的子类。 - 使 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)
}
}
注意 EmbedTestViewController
中 prepare
函数中的注释和注释代码行。
如果你运行这个和那些行注释,didSelectRowAt
将在MyStaticTableViewController
class。
如果你取消评论那些行,didSelectRowAt
将在EmbedTestViewController
class.
编辑