ios - MDCCardCollectionCell 不调用 didSelect 方法 - swift
问题描述
我正在尝试UICollectionViewCell
使用material-components
被调用来自定义MDCCardCollectionCell
。但是,当我成功实现它时,这意味着当我单击每个单元格时,我可以看到动画等等。但是在实现该类之后的一个问题,当我单击每个单元格时,永远不会调用该MDCCardCollectionCell
方法。didSelect
在它工作正常之前,在我实施MDCCardCollectionCell
之后,问题就出现了。如何解决这个特定问题?
这是我到目前为止所做的
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: cellId, for: indexPath) as! ExploreCellData
cell.exploreData = exploreCategory?.data![indexPath.item]
cell.layer.shouldRasterize = true
cell.layer.rasterizationScale = UIScreen.main.scale
cell.isSelectable = true
cell.cornerRadius = 8
cell.setShadowElevation(ShadowElevation(rawValue: 6), for: .selected)
cell.setShadowColor(UIColor.black, for: .highlighted)
return cell
}
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
if let data = exploreCategory?.data![indexPath.item] {
if let titleImage = data.imageName {
print(titleImage)
// This will push to another view controller after selected
dashboardViewController?.showDetailEachItem(data: titleImage, imageContent: data.titleImage!, imageDesc: data.descImage!)
}
}
}
ExploreCellData
是一个自定义单元格使用MDCCardCollectionCell
class ExploreCellData: MDCCardCollectionCell {
var exploreData: ExploreDataSection? {
didSet{
if let image = exploreData?.imageName {
viewsProperty.exploreImageView.image = UIImage(named: image)
viewsProperty.exploreNameLabel.text = exploreData?.titleImage
}
}
}
var viewsProperty = ExploreCategoryComponents()
let nameLabelView: UIView = {
let view = UIView()
view.translatesAutoresizingMaskIntoConstraints = false
view.layer.cornerRadius = 5
view.layer.masksToBounds = true
view.backgroundColor = .white
return view
}()
override init(frame: CGRect) {
super.init(frame: frame)
setupConstraint()
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
extension ExploreCellData {
func setupConstraint() {
addSubview(viewsProperty.cardView)
viewsProperty.cardView.frame = CGRect(x: 0, y: 0, width: frame.width, height: frame.height)
viewsProperty.cardView.addSubview(viewsProperty.exploreImageView)
viewsProperty.cardView.addSubview(nameLabelView)
viewsProperty.cardView.addSubview(viewsProperty.exploreNameLabel)
viewsProperty.exploreImageView.frame = CGRect(x: 5, y: 5, width: frame.width - 10, height: frame.height / 1.5)
// nameLabel.frame = CGRect(x: frame.width / 5, y: imageView.frame.maxY + 2, width: frame.width, height: frame.height / 4)
viewsProperty.exploreNameLabel.topAnchor.constraint(equalTo: viewsProperty.exploreImageView.bottomAnchor).isActive = true
viewsProperty.exploreNameLabel.widthAnchor.constraint(equalTo: self.widthAnchor).isActive = true
viewsProperty.exploreNameLabel.bottomAnchor.constraint(equalTo: viewsProperty.cardView.bottomAnchor).isActive = true
viewsProperty.exploreNameLabel.textAlignment = .center
// viewsProperty.exploreNameLabel.centerYAnchor.constraint(equalTo: nameLabelView.centerYAnchor).isActive = true
// viewsProperty.exploreNameLabel.centerXAnchor.constraint(equalTo: nameLabelView.centerXAnchor).isActive = true
}
}
解决方案
在集合视图中 didSelect 尝试调用类类型
let cell = collectionView.cell(indexPath.row) as? ExploreCellData
if let data = cell.exploreCatagory.......
另外,尝试将单元格设置为 isSelectable 如果这些不起作用,这里有一个网站会有所帮助:https ://material.io/develop/ios/components/cards/api-docs/Classes/MDCCardCollectionCell.html#/c:objc (cs)MDCCardCollectionCell(py) 可选
推荐阅读
- python - 使用类层次结构和 mypy 进行静态类型测试
- c++ - 有没有办法检查用户输入是否是数字?
- swiftui - NavigationView 中的 SwiftUI 自定义动画过渡?
- java - 使用注释修改 REST 参数 - Java EE8
- bash - ZSH:在脚本文件中执行函数
- c++ - 黑客等级 C++ 上的 Mini-Max Sum
- java - 如何减去两个时间值?
- react-native - 如何读取本地 css 文件以将其注入 react-native WebView?
- python - 正确使用 __format__
- android - 如何在反应原生模式上设置borderRadius?