在 tableview 单元格中委托
Posted
技术标签:
【中文标题】在 tableview 单元格中委托【英文标题】:Delegete in table view cell 【发布时间】:2020-06-24 17:02:27 【问题描述】:我有一张桌子,上面使用.xib
制作了cell
。这个cell
上有两个view
s。当我单击每个view
时,我为另一个viewController
设置图像 和标题。我为此创建了一个protocol
,但我无法在另一个viewController
上获取此数据,因为我的delegate = nil
。
在这个类中,我设置了属性。
сlass DataTableViewCell: UITableViewCell
var dataDelegete: DataAccountCellDelegete? = nil
@objc func accountViewTaped()
dataDelegete?.navigationBarIcon(image: UIImage(named: "icon") ?? UIImage())
dataDelegete?.navigationBarTitle(title: "title")
@objc func settingsViewTaped()
dataDelegete?.navigationBarIcon(image: UIImage(named: "icon") ?? UIImage())
dataDelegete?.navigationBarTitle(title: "title")
protocol DataAccountCellDelegete
func navigationBarIcon(image: UIImage)
func navigationBarTitle(title: String)
在这个类中,我得到并且想要设置这些属性,但是我的delegate = nil
class AccountViewController: UIViewController
var dataVC = DataTableViewCell()
override func viewDidLoad()
super.viewDidLoad()
dataVC.delegete = self
extension AccountViewController: DataAccountCellDelegete
func menuNavigationBarIcon(image: UIImage)
menuNavigationBar.addImage(image)
func menuNavigationBarTitle(title: String)
menuNavigationBar.addTitle(title)
如何正确声明委托?
【问题讨论】:
单元被重用并在cellForRowAt
中创建。变量dataVC
没用。一种轻量级的 swifty 方法是在单元格中使用回调闭包。
你为什么使用 cell ?你有 tableView 吗?
是的,我在表格中使用了这个单元格。
【参考方案1】:
视图层次应该是这样的
ViewController -> TableView -> TableViewCell
因此,ViewController 具有 TableView 的引用,而 TableView 具有单元格的引用。所以数据传递应该是相反的。
TableViewCell -> TableView -> ViewController
正如vadian 所说,单元格被重用并在cellForRowAt 中创建。变量dataVC在这里没用。
【讨论】:
以上是关于在 tableview 单元格中委托的主要内容,如果未能解决你的问题,请参考以下文章
如何在 tableView 中创建自定义单元格(滑动单元格)
点击/ reloadData不更改单元格时TableView单元格消失?
限制tableView中显示的单元格数量,滚动到最后一个单元格时加载更多单元格
带有两个自定义单元格的 TableView 导致单元格重用问题(Swift 4)