更新UICollectionViewCell内用户定义的UIView的内容

时间:2017-06-14 08:17:11

标签: ios uiview uiscrollview uicollectionview

我有UICollectionView个包含UIScrollView的单元格,在其中,有一个用户定义UIView(通过XIB)

我正在使用此代码来使用数据初始化单元格:

 func collectionView(_ collectionView: UICollectionView, willDisplay cell: UICollectionViewCell, forItemAt indexPath: IndexPath) {

        for v in cell.contentView.subviews {

            if let scroll: UIScrollView = v as? UIScrollView {
                scroll.contentOffset = CGPoint(x: 0, y: 0)

                for s in scroll.subviews {
                    if let content: DetailedView = s as? DetailedView {
                        content.fillData()
                    }
                }
            }
        } 
    }

在我的详细视图中,我有:

@IBDesignable
class DetailedView: UIView {

    @IBOutlet weak var btnTemp: UIButton!

    override init(frame: CGRect) {
        super.init(frame: frame)
        setupView()
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        setupView()
    }

    // Performs the initial setup.
    private func setupView() {
        let view = viewFromNibForClass()
        view.frame = bounds

        // Auto-layout stuff.
        view.autoresizingMask = [
            UIViewAutoresizing.flexibleWidth,
            UIViewAutoresizing.flexibleHeight
        ]

        addSubview(view)
    }

    // Loads a XIB file into a view and returns this view.
    private func viewFromNibForClass() -> UIView {

        let bundle = Bundle(for: type(of: self))
        let nib = UINib(nibName: String(describing: type(of: self)), bundle: bundle)
        let view = nib.instantiate(withOwner: self, options: nil).first as! UIView

        return view
    }

    func fillData(){
        self.btnTemp.titleLabel?.text = "btn temp"

        print("fill data")

    }


    @IBAction func btnTempClick(_ sender: Any) {
        print("Click")
    }
}

一切正常 - 视图可见,btnTempClick被调用,但fillData无效。它不会改变按钮的内容,仍然有默认文本“按钮”。如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

只是让它正式将其从评论中删除并将其作为答案。

您是否尝试过使用self.btnTemp.setTitle("btn temp", for:.normal)

答案 1 :(得分:1)

我认为您可以尝试使用setTitle forControlState