FlowKit
FlowKit copied to clipboard
Suggestion: Propagating actions from cell
Hey! :) It would be nice to have some default mechanism for propagating actions from cell to view controller. One approach that I use is this. Maybe it could be a start point
protocol MyCellDelegate: class {
fun didTapButton(inside cell: UITableViewCell)
}
final class MyClass: UITableViewCell {
weak var delegate: MyCellDelegate?
// This way I need first pass this delegate into adapter initialiser
func configure(with model: MyCellModel, delegate: MyCellDelegate) {
self.delegate = delegate
}
@IBAction func didTapButton(_ sender: Any) {
guard let model = model else { return }
delegate?.didTapButton(inside: self)
}
}
final class MyViewController: UIViewController, MyCellDelegate {
func didTapButton(inside cell: UITableViewCell) {
guard
let indexPath = tableView.indexPath(for: cell),
let model = director.section(at: indexPath.section)?.models[indexPath.item]
else { return }
// do some action with model
}
}
Also there is a library that simplifies work with UITableView. But it doesn't provide mechanism to work with UICollectionView. What it has is CustomActions for cells. It uses NotificationCenter to invoke actions: https://github.com/maxsokolov/TableKit/blob/master/Sources/TableCellAction.swift
Or maybe UIResponder chain could be used for this purpose. What do you think about these approaches? I can make a PR once we decide on a way how to do that :)
Hi, I'll be more than happy to look at PR. It could be a nice addition. However I've moved the framework to a new repository; the official name is Owl: https://github.com/malcommac/Owl. It introduces several changes and a definitive APIs set. If you want we can continue in it. Thanks again