Ячейки UICollectionView с изображениями внутри прототипа UITableView

ОБНОВЛЕНИЕ: я решил свою главную проблему правильных изображений, не загружающихся до прокрутки на collectionView. Я добавил collectionView.reloadData () в tableView: cellForRowAtIndexPath. Я также внес некоторые изменения, чтобы предварительно загрузить массив последовательностей, вместо того чтобы строить его при прокрутке таблицы (tableView: cellForRowAtIndexPath).

Добавлены обновления в GitHub, если вы заинтересованы.
https://github.com/Druiced/OpenDeck

Я буду следить, как только выясню, как предотвратить падение приложения, когда в возвращаемое значение помещается динамическое значение (если я установлю это значение равным 15, приложение не будет аварийно завершаться):

func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    return count(Array(sequenceArray[collectionView.tag])) / 2
}

ОРИГИНАЛЬНАЯ ПОЧТА: запрос некоторых указаний.

Этот урок помог мне понять, что это должно быть связано с моим DataSource / Delegate. Автор строит ячейку с помощью addSubview вместо того, чтобы использовать преимущества прототипа ячейки Xcode, что кажется классной вещью, поэтому я пытаюсь это сделать.http://ashfurrow.com/blog/putting-a-uicollectionview-in-a-uitableviewcell

Любая критика в отношении моего подхода или несоблюдения передового опыта приветствуется.

Каждая ячейка в таблице имеет UICollectionView. Каждая ячейка в представлении коллекции отображает изображение в порядке сохраненной строки «Последовательность». пример: ссылка "ADKDQDJDTD" до AD.png KD.png QD.png JD.png TD.png

У меня есть две проблемы, которые я не могу решить.

numberOfItemsInSection становится странным, когда количество карт определяется длиной массива (возвращаемое значение handArray.count / 2). Если я поставлю фиксированный номер, приложение будет работать, но не очень гладко.Когда стол впервые появляется, правильные карты не отображаются, пока я не прокручиваю стол вверх и вниз. Также кажется, что данные для каждого CollectionView пересекают пути, поскольку неправильные карты обнаруживаются при быстрой прокрутке вверх и вниз.

Я почти уверен, что это связано с настройкой моего источника данных.

DeckTableViewController.swift

import UIKit
import Parse

var deviceID: String?
var noRefresh: Bool?
var sequenceArray: Array<Character>?

class DeckTableViewController: UITableViewController, UICollectionViewDelegate, UICollectionViewDataSource {
var handArray: Array<Character>!
var timeLineData:NSMutableArray = NSMutableArray()

override func viewDidLoad() {
    super.viewDidLoad()
    noRefresh = false
    deviceId = UIDevice.currentDevice().identifierForVendor.UUIDString
}

override func viewDidAppear(animated: Bool) {
    if noRefresh == false {
        loadData()
        noRefresh = true
    }
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
    return 1
}

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return timeLineData.count
}

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    let cell:DeckTableViewCell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! DeckTableViewCell

    let deck:PFObject = timeLineData.objectAtIndex(indexPath.row) as! PFObject

    cell.collectionView.dataSource = self
    cell.collectionView.delegate = self

    let sequenceTemp = deck.objectForKey("Sequence") as! String
    handArray = Array(sequenceTemp)
    cell.sequenceId.setTitle(deck.objectId, forState: UIControlState.Normal)
    cell.cardCountLabel.text = "\((count(sequenceTemp)/2))"

    // Date to String Stuff
    var dateFormatter = NSDateFormatter()
    dateFormatter.dateFormat = "(MM-dd) hh:mm:ss"
    cell.timeLabel.text = dateFormatter.stringFromDate(deck.updatedAt!)

    let layout:UICollectionViewFlowLayout = UICollectionViewFlowLayout()
    layout.itemSize = CGSizeMake(99, 140)
    layout.scrollDirection = UICollectionViewScrollDirection.Horizontal

    cell.collectionView.collectionViewLayout = layout

    return cell
}


func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    return handArray.count / 2
}

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

    let cell:TableCollectionViewCell = collectionView.dequeueReusableCellWithReuseIdentifier("Cell", forIndexPath: indexPath) as! TableCollectionViewCell
    var bcolor : UIColor = UIColor.orangeColor()
    cell.layer.borderColor = bcolor.CGColor
    cell.layer.borderWidth = 2
    cell.layer.cornerRadius = 3

    var firstLetter: Character!
    var secondLetter: Character!

    //Building card file names from Sequence data
    if (indexPath.row * 2) + 1 <= handArray.count {

        firstLetter = handArray[indexPath.row * 2]
        secondLetter = handArray[indexPath.row * 2 + 1]
        let imageNameString = "\(firstLetter)\(secondLetter).png"
        let front = UIImage(named: imageNameString)
        cell.ImageView.backgroundColor = UIColor.orangeColor()
        cell.ImageView.image = front

    }

    return cell
}

DeckTableViewCell.swift

import UIKit

class DeckTableViewCell: UITableViewCell, UITextViewDelegate {

    @IBOutlet var collectionView: UICollectionView!
    @IBOutlet var sequenceId: UIButton!
    @IBOutlet var timeLabel: UILabel!
    @IBOutlet var cardCountLabel: UILabel!

    override func awakeFromNib() {
        super.awakeFromNib()
        // Initialization code
    }

    override func setSelected(selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)

    }
}

TableCollectionViewCell.swift

импорт UIKit

class TableCollectionViewCell: UICollectionViewCell {

    @IBOutlet var ImageView: UIImageView!

}

Для этого примера я установил (возвращаю handArray.count / 2) значение 10 и загрузил 3 последовательности. Число в верхнем центре представляет количество карточек для каждого ряда. Обратите внимание, что CollectionView не обновляется с правильными картами, он собирает данные из других CollectionView. Если я добавлю еще несколько последовательностей в этот микс, при прокрутке вверх и вниз правильные карты будут заполняться НЕКОТОРЫМИ, но непредсказуемыми.

Спасибо за любые предложения, я рад вернуться к чертежной доске. ура

Ответы на вопрос(1)

Ваш ответ на вопрос