UIView上的CollectionView单元实例(委托外部)无法快速运行5

问题描述 投票:0回答:1

我有一个名为HorizontalMenuCollectionView的视图,正在该视图上加载集合视图。我可以通过将其与任何视图(来自身份检查器)挂钩来使用它。所有人都工作正常。但是现在我想设置将在开始时加载此视图的第一个项目单元格的背景色。但是单元格背景颜色没有改变。我在这里想念什么?提前谢谢。

这是我要设置项目单元格背景色的功能

func selectinitialCell() {
    let selectedIndexPath = IndexPath(item: 0, section: 0)
    let cell = menuCollectionView.dequeueReusableCell(withReuseIdentifier: "HorizontalMenuCollectionViewCell", for: selectedIndexPath) as! HorizontalMenuCollectionViewCell
    cell.backgroundColor = UIColor.blue.withAlphaComponent(0.05)
    menuCollectionView.reloadData()
}

这是完整的HorizontalMenuCollectionView

import UIKit

protocol HorizontalMenuCollectionViewDelegate {
    func didSelectItemAtIndexPath(title: String)
}

class HorizontalMenuCollectionView: UIView {

    var horizontalMenuCollectionViewDelegate : HorizontalMenuCollectionViewDelegate!
    @IBOutlet weak var menuCollectionView: UICollectionView!
    var objectArray = [String?]()
    var isFirstTimeGettingCalled = true

    //This initializer will call from code
    override init(frame: CGRect) {
        super.init(frame: frame)
        self.initialization()
    }

    //This initializer will call from XIB
    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        self.initialization()
    }

    func initialization() {
        let view = Bundle.main.loadNibNamed("HorizontalMenuCollectionView", owner: self, options: nil)![0] as? UIView
        view?.frame = self.bounds
        self.autoresizingMask = [.flexibleHeight, .flexibleWidth]
        self.addSubview(view!)
        registerNib()
        selectinitialCell()
    }

    func selectinitialCell() {
        let selectedIndexPath = IndexPath(item: 0, section: 0)
        let cell = menuCollectionView.dequeueReusableCell(withReuseIdentifier: "HorizontalMenuCollectionViewCell", for: selectedIndexPath) as! HorizontalMenuCollectionViewCell
        cell.backgroundColor = UIColor.blue.withAlphaComponent(0.05)
        menuCollectionView.reloadData()
    }

    func registerNib() {
        let horizontalMenuCollectionViewCellNib = UINib(nibName: "HorizontalMenuCollectionViewCell", bundle: nil)
        menuCollectionView.register(horizontalMenuCollectionViewCellNib, forCellWithReuseIdentifier: "HorizontalMenuCollectionViewCell")
    }
}

extension HorizontalMenuCollectionView: UICollectionViewDelegate, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout {
    func numberOfSections(in collectionView: UICollectionView) -> Int {
        return 1
    }

    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return objectArray.count
    }

    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets {
        return UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)
    }

    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat {
        return 0
    }

    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat {
        return 0
    }

    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
        let text = NSAttributedString(string: objectArray[indexPath.row]!)
        return CGSize(width: text.size().width + 80, height: self.bounds.height)
    }

    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "HorizontalMenuCollectionViewCell", for: indexPath) as! HorizontalMenuCollectionViewCell
        cell.titleLabel.text = objectArray[indexPath.row]!

        let backgroundView = UIView()
        backgroundView.backgroundColor = UIColor.blue.withAlphaComponent(0.05)
        cell.selectedBackgroundView = backgroundView

        return cell
    }

    func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
        menuCollectionView.scrollToItem(at: indexPath, at: .centeredHorizontally, animated: true)
        horizontalMenuCollectionViewDelegate.didSelectItemAtIndexPath(title: objectArray[indexPath.row]!)
    }
}

是我正在访问它的视图控制器

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var horizontalMenuCollectionView: HorizontalMenuCollectionView!

    override func viewDidLoad() {
        super.viewDidLoad()
        horizontalMenuCollectionView.horizontalMenuCollectionViewDelegate = self
        horizontalMenuCollectionView.objectArray = ["A", "AA", "AAA", "AAAA", "AAAAA"]
    }
}

extension ViewController: HorizontalMenuCollectionViewDelegate {
    func didSelectItemAtIndexPath(title: String) {
        print("\(title)")
    }
}

完整示例项目链接为HERE

ios swift uicollectionviewcell collectionview indexpath
1个回答
1
投票

用下面的替换您的func selectinitialCell()。

func selectinitialCell() {
    menuCollectionView.performBatchUpdates({
        self.menuCollectionView.reloadData()
    }) { (finish) in
        if finish{
            let selectedIndexPath = IndexPath(row: 0, section: 0)
            self.menuCollectionView.selectItem(at: selectedIndexPath, animated: false, scrollPosition: .left)
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.