我以编程方式创建了一个视图控制器。我不使用Storyboard,因为此视图控制器将由多个视图控制器呈现,并且我不希望让Storyboard看起来过于复杂。

该视图控制器包含一个UICollectionView,它的单元是通过情节提要定制的,称为CustomCell.xib,它只有UIImageView作为子视图。

然后,我创建了一个CustomCell.swift文件,并使其成为CustomCell.xib的文件所有者。我还拖动了UIImageView并将其链接到CustomCell.swift:

class CustomCell: UICollectionViewCell {
    @IBOutlet weak var imageView: UIImageView!

    prepareForReuse() {
        imageView.image = nil
    }
}

然后,在我的视图控制器的viewDidLoadcellForItemAt中:
override func viewDidLoad() {
    let layout = UICollectionViewFlowLayout()
    layout.scrollDirection = .horizontal
    let myCollectionView = UICollectionView.init(frame: view.bounds,
                                                 collectionViewLayout: layout)

    myCollectionView.register(CustomCell.self, forCellWithReuseIdentifier: "Cell")

    view.addSubview(myCollectionView)
}

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

    cell.imageView.image = ...        // <---"imageView" is nil when running, why?

    return cell
}

为什么会出现此问题?

最佳答案

您需要注册笔尖,而不是您的单元格的类。

myCollectionView.register(UINib(nibName:"CustomCell.xib",bundle:nil), forCellWithReuseIdentifier: "Cell")

关于ios - 即使从Storyboard链接,UICollectionView自定义单元格的 subview 也为零,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50142451/

10-13 02:37