我有以下设置:
UITableViewController
的子类名为: MainTVC
一个名为 MainDS
的数据源文件,它是 MainTVC
一个名为 MainCell
MainCell
有一个名为buttonMain
buttonMain
将在 target
(数据源文件)中的cellForRowAtIndexPath
分配MainDS
来自 MainDS
的代码:
....
func tableView(_ tableView: UITableView,
cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "MainCell", for: indexPath) as! MainCell
cell.buttonMain.addTarget(MainTVC(), action: #selector(MainTVC.buttonMainTapped(sender:)), for: .touchUpInside)
return cell
}
....
点击buttonMain
时没有任何结果,因为cell.buttonMain.addTarget(MainTVC()
..< - #selector
需要MainDS使用的**MainTVC**
实例。
我理解数据源不应该有ViewController
的实例,因此不应该传入 - datasource只能访问tableView
ViewController
}。
问题:处理此问题的最佳做法是什么?我应该如何分配位于#selector
TableViewController
中的cellForRowAtIndexPath
我的数据源文件中的RewriteRule ^(.*)$ index.php?xparam=$1 [QSA,L]
?
答案 0 :(得分:0)
在MainDS中,使用参数创建init函数是MainTVC,例如:
class MainDS: UITableViewDataSource
{
weak var mainTVC:MainTVC?
init(mainTVC: MainTVC) {
self.mainTVC = mainTVC
}
....
func tableView(_ tableView: UITableView,
cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "MainCell", for: indexPath) as! MainCell
cell.buttonMain.addTarget(self.mainTVC?, action: #selector(MainTVC.buttonMainTapped(sender:)), for: .touchUpInside)
return cell
}
....
}
在MainTVC中分配MainDS
self.tableView.dataSource = MainDS(mainTVC: self)