我在同一个视图控制器中有两个表视图。我在顶级表视图中显示作者。当我选择作者时,相应的作者书应该显示在底部的表格视图中(书籍列表)。
如何在单视图控制器中处理这两个表视图的tableView:didSelectRowAtIndexPath:
。
任何人都可以帮助我完成这项任务。
答案 0 :(得分:0)
该UITableViewDelegate
方法的函数原型如下:
func tableView(_ tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath)
第一个参数是选择行的UITableView
。因此,在您的实现中,您可以执行以下操作:
// Assuming you have two instances in your viewcontroller like this
var tableViewOne: UITableView!
var tableViewTwo: UITableView!
func tableView(_ tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
if tableView == tableViewOne {
// User selected a row in tableviewOne
} else if tableView == tableViewTwo {
// User selected a row in tableviewTwo
}
}
如果您的代码变得混乱,因为您将两个UITableViewDelegate
的逻辑组合到一个视图控制器中,那么您当然也可以创建单独的对象。
class FirstTableViewDelegate: UITableViewDelegate {
func tableView(_ tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
// User selected a row in tableviewOne
}
}
class SecondTableViewDelegate: UITableViewDelegate {
func tableView(_ tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
// User selected a row in tableviewTwo
}
}
class YourViewController: UITableViewController {
var firstDelegate: FirstTableViewDelegate!
var secondDelegate: SecondTableViewDelegate!
override func viewDidLoad() {
firstDelegate = FirstTableViewDelegate()
tableViewOne.delegate = firstDelegate
secondDelegate = SecondTableViewDelegate()
tableViewTwo.delegate = secondDelegate
}
}
请注意,必须将代理保存在您自己的UIViewController
中的实例变量中。如果您只是在本地创建它们或仅将它们分配给UITableView
,那么它们将立即被释放,因为该委托是weak
引用。