2017-06-15 5 views
0

UICollectionViewのcellForItemAtメソッドでロードしたいが、コレクションビューのdequeueReusableCellメソッドからセルを取得/インスタンス化せずに、カスタムUICollectionViewCellを持っています。再利用せずにnibからUICollectionViewCellをロードする

私が遭遇してる問題がはっきりと同様に、細胞をロードするときにということである。

cell.awakeFromNib() and/or layoutIfNeeded() 

をなして:

let cell = MyCustomCell() 

それは、IBのプロパティがロードされていない、私は呼び出しも試してみたのです効果。デキューメソッドを使用してIBからロードするビューを取得することはできますが、前述のように使用することはできません。

私はきちんとコレクションビューが住んでいるビューコントローラののviewDidLoadでペン先を登録しています:

let name = String(describing: MyCustomCell.self) 
collectionView.register(
    UINib(
     name: name, 
     bundle: nil), 
    forCellWithReuseIdentifier: "customCell") 

答えて

5

のみクラスがインスタンス化されているためIBOutletsがMyCustomCellのインスタンス上で動作していない理由であり、 xib/nibではありません。 tableViewでセルを登録してから、そのセルをデキューすると、両方とも初期化され、魔法の発生場所があります。

あなたが本当にこれはあなたが何ができるかであるテーブルビューのデキュー方法を使用せずにセルをロードする場合:

  1. は、あなたのUITableViewCellのカスタムクラスのVARを作成し、この場合にはMyCustomCell

    です
    var notReusableCell:CellTableViewCell? 
    
  2. ビューでは、ペン先を押して、この場合に必要なビューを取得して、最初のビューになるようにします。あなたのcellForRowAt方法で今

    let nib = Bundle.main.loadNibNamed("CellTableViewCell", owner: self, options: nil) notReusableCell = nib?.first as! CellTableViewCell?

  3. あなたのVARに

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { guard let cell = notReusableCell else { return CellTableViewCell() } return cell }

を格納されたセルを渡す慣行のこの種のは一般的ではありませんので、何をしようとする修正してください。

+0

あなたは100%正しいです。代わりに、いくつかの異なるセルに異なる再利用識別子を使用して、通常のようにデキューしました。回答を更新して受け入れることをお勧めします。 –

+0

あなたは正しいアプローチを得ることは素晴らしいことです!私は私の応答が投稿の質問に答えると思うので、あなたがそれを受け入れるなら、私は本当に幸せになるでしょう:) – Jonathanff

関連する問題