【问题标题】:Delegete in table view cell在 tableview 单元格中委托
【发布时间】: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 吗?
  • 是的,我在表格中使用了这个单元格。

标签: ios swift uitableview delegates cell


【解决方案1】:

视图层次应该是这样的

ViewController -> TableView -> TableViewCell

因此,ViewController 具有 TableView 的引用,而 TableView 具有单元格的引用。所以数据传递应该是相反的。

TableViewCell -> TableView -> ViewController

正如vadian 所说,单元格被重用并在cellForRowAt 中创建。变量dataVC在这里没用。

【讨论】:

    猜你喜欢
    • 2022-10-16
    • 2014-08-04
    • 2022-07-05
    • 2021-04-17
    • 2012-04-06
    • 1970-01-01
    • 1970-01-01
    • 2016-01-04
    • 1970-01-01
    相关资源
    最近更新 更多