到达由不同类的代码创建的UI元素

时间:2018-12-28 08:15:50

标签: swift xcode

我正在以编程方式创建UICollectionViewCells。该单元格具有一个“内容视图”(我仅像装饰性框架一样使用它)。在该视图中,我创建UILabel,UIImageView和另一个UILabel。初始化单元后,所有设置均已完成。所有作品都很完美

在ViewController上,我想在方法中到达该UI组件: CellForItemAt 最好的方法是什么?现在我正在使用viewTags来达到特定的组件,但是也许有更好的方法吗?

我需要将其填充以填充CoreData中的数据

BR iMat

2 个答案:

答案 0 :(得分:0)

假设您有自定义的UICollectionViewCell子类

class MyCell: UICollectionViewCell {
    var item: Item? 
    ...
    func setUI() {
        label.text = item.someProperty
        ...
    }
    ...
}

出队时,您可以将单元格转换为子类

cell as! MyCell

...然后您可以访问子类的方法,变量等。

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "identifier", for: indexPath) as! MyCell
    cell.item = array[indexPath.row]
    cell.setUI()
    ...
    return cell
}

答案 1 :(得分:0)

以编程方式创建UICollectionViewCell's UI时,可以在UICollectionViewCell中将这些UI元素作为公共变量。

并创建一个公共方法,将数据设置到CustomCell的UI元素中,如下所示。

class CustomCell:UICollectionViewCell{

    var imageView:UIImageView!
    var label1:UILabel!
    var label2:UILabel!

    override init(frame: CGRect) {

        super.init(frame: frame)

        //Initialize your imageView,label1 and label2
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

    func set(_ text1:String?, text2:String?, image:UIImage?){

        imageView.image = image
        label1.text = text1
        label2.text = text2
    }
}

cellForItemAt函数中,将数据传递到自定义单元格,如下所示。

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "YourCustomCellID", for: indexPath) as! CustomCell

        cell.set("1", text2: "2", image: yourImage)

        return cell
    }