我有ViewController(MainVC),TableView填充了自定义单元格。他们已启用或禁用星座。
当用户点击单元格时,他导航到单独的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。接下来我该怎么办?
答案 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)
}
}