【发布时间】:2020-12-01 22:49:49
【问题描述】:
有一个 TopMenuBar 类。这是主类(名为 - MainVC)中 tableViewCell 的菜单栏(collectionView)。
class TopMenuBar: UITableViewCell {
public var delegate: TopMenuBarDelegate?
}
和协议:
protocol TopMenuBarDelegate {
func didTapTopMenuCell(named: String)
}
在带有委托的 didSelectItemAt() 方法中,我调用了这个协议:
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
///Relay to delegate about menu item selection
let selectedItem = menuItems[indexPath.row + 1].description
delegate?.didTapTopMenuCell(named: selectedItem)
}
此外,在主类 - MainVC 中,我订阅了协议 - TopMenuBarDelegate,添加了协议方法 - didTapTopMenuCell(),创建了 TopMenuBar 类的实例,并在 viewDidLoad 方法中为该协议分配了委托 - MainVC 类。
class MainVC: UIViewController, TopMenuBarDelegate {
let topMenuBar = TopMenuBar()
func didTapTopMenuCell(named: String) {
print(named)
}
override func viewDidLoad() {
super.viewDidLoad()
topMenuBar.delegate = self
}
}
为了测试功能,我只想打印我单击的单元格的名称。 结果,控制台中没有任何内容。
【问题讨论】:
-
TopMenuBar是如何呈现在屏幕上的?您将委托注入到该类的同一实例中吗? -
@PhillipMills 这是我的菜单栏的一个单独的 collectionview 类。在 MainVC 类中,它表示为 tableView 中的 headerView。作为表格中的菜单))
-
func collectionView(_ collectionView: UICollectionView在TopMenuBar或MainVC内吗? -
TopMenuBar 内的@aheze 收集方法。
-
嗯...你能确认这个方法确实被调用了吗?
标签: ios swift design-patterns delegates protocols