2016-05-08 20 views
1

だから、私はCollectionViewの中にTableViewの中にある4つのUICollectionViewCellを持っています。 (私はTableViewControllerをCollectionViewのDataSourceとDelegateとして設定しました)。UICollectionViewCellの中にUILabelを設定する

ここでは、CKRecord内に4つの要素の文字列配列を格納しました。どのようにして4つのセルの内側にラベルを設定すれば、配列の各文字列を表示できますか?ここで

が、それは次のようになります。今、明らかに

func collectionView(collectionView: UICollectionView, 
        numberOfItemsInSection section: Int) -> Int { 

    return 4 
} 


func collectionView(collectionView: UICollectionView, 
         cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { 

     let cell = collectionView.dequeueReusableCellWithReuseIdentifier("Cell", forIndexPath: indexPath) as! CvCell 

     let poll = polls[indexPath.row] // polls is a [CKRecord]() 
     let labelContent = poll["4strings"] as? [String] 


     cell.cellLabel.titleLabel?.text = labelContent 

     return cell 

    } 

、それは私が基本的に配列自体に、各セルのラベルを設定するため、仕事に行くのではありません。どのようにして各CvCellラベルを通過するforループを書くことができますか、どうすればどのようにラベルを指定できますか? 3番目のセルをlabelContent [2]の値に設定しますか?

UPDATE:

は完全に言及するのを忘れてしまった、クラウド内のデータ構造は基本的に次のようになります。

配列1 = [1A、1B、1C、1D]

配列2 = [2aと、図3B、2C、2D]

ARRAY3 = [3A、2B、3C、3D]

array4 = [4A、4B、4C、4D]

そして、私はuser3353890 @提案何をしようとした場合、それは私に私のテーブルビューのために、以下の結果与えている:

tableview1cell - collectionview1:[1A、2B、3C、4D] - >これらはcollectionviewcellラベル

ですが

tableview2cell - collectionview2:[1A、2B、3C、4D]

tableview3cell - collectionview3:[1A、2B、3C、4D]

tableview4cell - collectionview4:[1A、2B、3C、4D]

しかし、私が欲しいものです:

tableview1cell - collectionview1:[1A、1B、1C、1D]

tableview2cell - collectionview2:[2A、2B、2C、2D]

tableview3cell - collectionview3:[ 3A、3B、3C、3D]

tableview4cell - collectionview4:[4A、4B、4C、4D]

私は本当に苦労これを説明してい申し訳ありませんが、私は誰かが私は」何を取得します願っています私は何をしようとしているの?

+0

をlabelContentは、文字列の配列ことになっていますか? label.textを配列に設定することはできません。配列内の文字列を1つのラベルに表示する場合は、forループを使用して配列を繰り返し、各文字列を前の配列に追加して、文字列に作成してラベルに表示します。 – user3353890

+0

はい私はこのobvを知っています。私は最後の段落で説明したように、最初のcollectionviewセルのラベルに配列の最初の文字列を、2番目のcollectionviewセルのラベルに配列の2番目の文字列を設定したい.. – user3545063

+0

しかし、私は1つのセルだけを返すので、ここでforループを使用する方法はわかりません。 – user3545063

答えて

1

まず、1つのセルは返されません。 numberOfItemsInSectionメソッドの各セクションに4つのアイテムが必要であると規定しているため、最終的に4つのセルが返されます。

func collectionView(collectionView: UICollectionView, 
       numberOfItemsInSection section: Int) -> Int { 
    return 4 
} 

cellForItemAtIndexPathは、各セルの表示方法を調整します。あるセクションに4つのアイテムがあると述べたので、このメソッドは4回呼び出され、そのセクションのアイテムとして呼び出されるたびに1つのセルが返されます。

func collectionView(collectionView: UICollectionView, 
        cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { 

    let cell = collectionView.dequeueReusableCellWithReuseIdentifier("Cell", forIndexPath: indexPath) as! CvCell 

    let poll = polls[collectionView.tag] // polls is a [CKRecord]() 
    let labelContent = poll["4strings"] as? [String] 

    // This should give you the string that you want. 
    let myString = labelContent[indexPath.row] 

    // Display the string in the label. 
    cell.cellLabel.titleLabel?.text = myString 

    return cell 

} 

labelContent配列を設定したら、indexPath.rowを配列に渡して各インデックスでmyStringを取得します。したがって、1番目のセル(0インデックス)では、配列の1番目の文字列を返します(0インデックス)。

編集

あなたが投票を作成する際、データを表示しながら、すべての配列の正しい順序を維持するためにindexPath.sectionを使用しています。あなたはセルを作成するとき、あなたのcollectionViewをデキューするとき、セルのcollectionView.tagが続いindexPath.section

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCellWithIdentifier("customCell", forIndexPath: indexPath) as! CustomCell 
    cell.collectionView.delegate = self 
    cell.collectionView.dataSource = self 
    cell.collectionView.tag = indexPath.section 
    return cell 
} 

を設定し、あなたのtableView cellForRowAtIndexPathメソッドでは、

let poll = polls[collectionView.tag] 

編集2

tableViewCellのindexPathを取得するために、上記のようにcollectionView.tagを呼び出して適切な配列にアクセスすることができます。

+0

あなたの答えをありがとう!はい、申し訳ありませんが、私はちょっとだけ細胞の1回の "青写真"を4回返すことを意味しました。また、私は4つのCKRコードがあることを完全に忘れていました(したがって私は投票に投票を宣言します[indexpath。行])、これら4つのCKRコードのそれぞれは、4つの文字列の1つの配列を有する。 あなたの洞察力を高めるために投稿を更新します – user3545063

+0

追加情報をありがとうございません!私にしばらくお待ちください。私は解決策を考え出します。 – user3353890

+0

@ user3545063上記のソリューションを更新しました。私はこれが今働くべきだと思う。 – user3353890

1

あなたがのtableView内巣にcollectionViewを持っていないので、よりよい解決策:

これは、あなたがしたいセクションの数を示します

。これは、対応する各セクションのサブ配列を取り、そのcollectionViewセクション内のアイテムの数が配列内の項目数に対応できるようになります

func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int { 
    return polls.count 
} 

:配列あなたの「世論調査」における各アレイの一つのセクション:

func collectionView(collectionView: UICollectionView, 
       numberOfItemsInSection section: Int) -> Int { 
    let poll = polls[section] as? [String] 
    return poll.count 
} 

ここにあなたcollectionViewセルを表示します。

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { 

    let cell = collectionView.dequeueReusableCellWithReuseIdentifier("Cell", forIndexPath: indexPath) as! CvCell 

    let poll = polls[indexPath.section] // polls is a [CKRecord]() 
    let labelContent = poll["4strings"] as? [String] 

    // This should give you the string that you want. 
    let myString = labelContent[indexPath.row] 

    cell.cellLabel.titleLabel?.text = myString 

    return cell 

} 
+0

明日、これを調べますよ、ありがとう! これは私のストーリーボードのレイアウトにどのように影響しますか?テーブルビューを削除してコレクションビューに置き換えるだけでいいですか? – user3545063

+0

はい、単にcollectionviewまたはcollectionviewコントローラを使用してください。前者を使用する場合は、代理人とデータソースを添付することを忘れないでください。あなたのストーリーボードはずっとシンプルになります。あなたはtableviewcells内のコレクションビューをネストしようとはしません。シンプルに保つことができれば、保守や拡張も非常に簡単です。 – user3353890