有一个 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
.
let topMenuBar = TopMenuBar()
在viewDidLoad
你这样做topMenuBar.delegate = self
,但你设置为标题的实际视图是这样的:
guard let cell = tableView.dequeueReusableCell(withIdentifier: TopMenuBar.cellIdentifier()) as? TopMenuBar else {
return nil
}
在这里,您正在创建一个新的TopMenuBar
( cell
)!你根本没有使用let topMenuBar = TopMenuBar()
!
你需要做的是摆脱:
let topMenuBar = TopMenuBar()
override func viewDidLoad() {
super.viewDidLoad()
topMenuBar.delegate = self
}
而是设置cell
.
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
guard let cell = tableView.dequeueReusableCell(withIdentifier: TopMenuBar.cellIdentifier()) as? TopMenuBar else {
return nil
}
cell.delegate = self /// assign here!
return cell
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句