在 tableview 单元格中委托

Posted

技术标签:

【中文标题】在 tableview 单元格中委托【英文标题】:Delegete in table view cell 【发布时间】:2020-06-24 17:02:27 【问题描述】:

我有一张桌子,上面使用.xib 制作了cell。这个cell 上有两个views。当我单击每个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)

tableview 单元格我们如何快速调整单元格的大小以及图像和标签

tvOS tableView 从一个单元格到另一个单元格平滑滚动