在Swift中,UICollectionView中的IBOutlets为空

4
当我打印出我在MyCell类中声明的IBOutlets时,它们显示为空。
ViewController中的方法。
public override func viewDidLoad() {
    super.viewDidLoad()
    self.seriesCollectionView.register(MyCell.self, forCellWithReuseIdentifier: "MyCell")
}

public func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "MyCell", for: indexPath) as! MyCell
    cell.setup()

    return cell
}

MyCell类

class MTSeriesViewCell: UICollectionViewCell {
@IBOutlet weak var cellView: UIView!

@IBOutlet weak var cellImageView: UIImageView!
override func awakeFromNib() {
    super.awakeFromNib()
}

public func setup() {
    print(cellView)
}

}

在ViewController的viewDidLoad中,我应该用什么其他方式来初始化/注册MyCell类吗?

你在Interface Builder中制作了Cell UI吗?如果是,请展示在哪里注册该单元格。 - Sean Lintern
1
self.seriesCollectionView.register(MyCell.self, forCellWithReuseIdentifier: "MyCell") 如果您没有使用单独的xib文件来创建cell,请忽略此行 - KKRocks
3个回答

9

替换为:

self.seriesCollectionView.register(MyCell.self, forCellWithReuseIdentifier: "MyCell")

使用:

self.seriesCollectionView.register(UINib(nibName: "MyCellXibName", bundle: nil), forCellWithReuseIdentifier: "MyCell")

太好了!非常感谢。那么类的注册方式与xib不同吗?你能否给我推荐一份好的文档来阅读学习呢?我对Swift完全是新手。 - A_G
@AsthaGupta 不同之处在于,只有在代码中创建单元格的子视图时才需要注册类。如果使用xib文件,请注册一个nib。 - kamil3
在我的情况下,它会抛出“无法加载捆绑中的NIB”错误。有什么想法吗? - Alok

1
在自定义单元格的xib文件中,您需要从视图上进行控制拖动,并将它们连接到其IBOutlets上。

0

如果您正在使用.xib文件来创建单元格,您需要使用控件拖动从视图到文件所有者创建引用输出并将它们连接起来。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接