使用Swift进行TableViewCell委派

时间:2018-01-13 09:52:27

标签: ios swift uitableview delegates protocols

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

enter image description here

当用户点击单元格时,他导航到单独的ViewController(DetailedVC)。那里有按钮,其中开关具有对象的状态。我想在这种情况下使用委托模式 - 所以当用户回到MainVC对象时,功能状态也会更新。

我创建了协议

protocol FeaturedDelegate {
   func toggleFeatured (cell : CustomCell) 
}

Made MainC符合它

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
}

在这种情况下,委托是在单元格内。但我需要ti才能进入DetailedVC。接下来我该怎么办?

1 个答案:

答案 0 :(得分:1)

在DetailVC中创建协议。

// <强> DetailVC

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

当星值改变而不是调用此委托函数时。

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

在Masterviewcontroller的tableview中,选择了函数集委托

// <强> MasterViewController

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

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

    //show detailvc
}

如果您不想重新加载完整的tableview,那么您只能重新加载单元格。

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)
   }
}