2017-02-12 5 views
0

です。私のカスタムセルクラスの中にinit()をいくつか入れてみると、本当に混乱しています。init()内のカスタムセルクラスがデリゲートで、collectionViewのデータソースが

どのようにinit()することで、配列のデータをcellForItemAtで使用できるようにするのですか?

var partArray : [CollectionStruct] = [] 

init(partArray: [CollectionStruct]) { 
super.init(partArray: [CollectionStruct]) 


    innerCollectionView.delegate = self 
    innerCollectionView.dataSource = self 
    //innerCollectionView.tag = item 

    // add some stuff from local sql lite to array 
    // this is how i normally do this in viewDidLoad 
    // but cant use that in cell subclass 
    BuildArray.buildArrayFromQuery(queryForCollection: "Part", delegateSender: "DownloadPack", completeBlock: { (result) in 
     if result.isEmpty == false { 
      self.partArray = result 
     } 
    }) 
} 

私はちょうど行う場合:

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

カスタムイニシャライザを作成することはできません。必要な初期化子を実装し、データをロードするための他の関数を用意する必要があります。 – Paulw11

+0

セルオブジェクトのコレクションビューを再ロードする前にデータを割り当ててください。 – iAviator

+0

私はこれが何を意味するのかわかりません。この場合、データはどこからリロードされますか?セルがネストされたコレクションビューのデータソースである場合、ここにデータを割り当てる必要がありますか? – Pippo

答えて

0

あなたはUITableViewCellのための独自の初期化子を作成することはできません。

init() { 
// stuff for the array 
} 

私は、私は、このブロックが含ま迅速な示唆を得ます。上書きできるイニシャライザは、フレーム(init(frame))とコード(init(coder))を受け取るものの2つです。

問題の解決策を見つけるために、データ配列を受け取るプロパティまたはメソッドを使用できます。どちらか一方が呼び出されるか、セルが作成された後に設定されます。あなたはあなたの設定を行い、その後、collectionViewのreloadData()に電話します。

プロパティを使用する場合は、プロパティのdidSetに記載のロジックを実行できます。

関連する問題