Ячейки 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. Если я добавлю еще несколько последовательностей в этот микс, при прокрутке вверх и вниз правильные карты будут заполняться НЕКОТОРЫМИ, но непредсказуемыми.
Спасибо за любые предложения, я рад вернуться к чертежной доске. ура