gpt4 book ai didi

ios - 使用 Swift 进行 TableViewCell 委托(delegate)

转载 作者:行者123 更新时间:2023-12-02 04:00:15 26 4
gpt4 key购买 nike

我有 ViewController (MainVC),其中 TableView 填充了自定义单元格。他们已启用或禁用星号。

enter image description here

当用户点击单元格时,他会导航到单独的 ViewController (DetailedVC)。那里有一个按钮可以切换对象的特色状态。我想在这种情况下使用委托(delegate)模式 - 因此当用户返回 MainVC 时,对象的功能状态也会更新。

我创建了协议(protocol)

protocol FeaturedDelegate {
func toggleFeatured (cell : CustomCell)
}

使 MainVC 符合它

class MainVC : UIViewController, UITableViewDelegate, UITableViewDataSource, FeaturedDelegate {
func toggleFeatured (cell : CustomCell) {
//toggle featured status for cell
}
}
......
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell: CustomCell = ...
cell.featuredDelegate = self
return cell
}

在这种情况下,委托(delegate)位于单元格内。但我需要 ti 进入DetailedVC。接下来我应该做什么?

最佳答案

在 DetailVC 中创建协议(protocol)。

//DetailVC

protocol SecondViewControllerDelegate: class {
func toggleFeatured (indexOfCell index: Int, isEnable: Bool)
}

当星值发生变化时调用此委托(delegate)函数。

delegate?.toggleFeatured(indexOfCell: indexOfCell, isEnable: isEnable)

在Masterviewcontroller的tableview中didselected函数设置委托(delegate)

//MasterViewController

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let detailVC = DetailVC()/* get detalVC object */

detailVC.delgate = self
detailVC.indexOfCell = indexPath.row

//show detailvc
}

如果您不想重新加载完整的表格 View ,那么您可以仅重新加载单元格。

extension MasterViewController: SecondViewControllerDelegate {
func toggleFeatured(indexOfCell index: Int, isEnable: Bool) {

let object = array[index]
// Logic to enable or disable star for for object

tableView.reloadRows(at: [IndexPath(item: index, section: 0)], with: .automatic)
}
}

最重要

不要忘记让委托(delegate)变得。 Weak 关键字不会让保留计数增加一,因此不会生成保留周期,并且不会出现内存泄漏问题。如果我们不写 and 任何关键字,那么默认情况下它将是强的,这会增加保留计数并创建保留周期(死锁)。

我们需要创建协议(protocol)类类型,因为weak关键字只能与类类型协议(protocol)一起使用。检查协议(protocol)声明,它继承了

class DetailVC {
weak delegate: SecondViewControllerDelegate?
}

观看此视频以了解内存泄漏并修复它。

https://www.youtube.com/watch?v=sp8qEMY9X6Q

关于ios - 使用 Swift 进行 TableViewCell 委托(delegate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48238716/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com