我不确定这是否是正确的说法,但我一直在尝试将数据传输到ColectionViewCell,但它似乎并没有显示所有这些。这个问题来自Cards are not displaying different data. Koloda/Yalantis。看来该框架需要一种不同的方法将数据应用于索引,但我不知道如何实现这一点。
以下是我班级的表现:
import SwiftyJSON
class Person {
var firstName: String?
init(json: JSON) {
self.firstName = json["first_name"].stringValue
}
}
这是我管理Person
类的单身人士:
class PersonManager {
static let shared = PersonManager()
private init() {}
var persons = [Person]()
func removeAll() {
persons.removeAll()
}
func addPerson(_ person: Person) {
persons.append(person)
}
}
以下是我尝试在 获取并初始化和附加之后调用数据的方式:
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath)
let person = PersonManager.shared.persons[kolodaView.currentCardIndex]
//Returns the first persons first name as it is supposed to
cell.textLabel?.text = person.firstName
}
数据存在,因为它计算了我的数据库中的人数。但它继续为所有卡片返回第一个人。
更新
使用Firebase我正在获取用户数据,然后将其添加为:
func fetchUser() {
let databaseRef = Database.database().reference(withPath: "users")
databaseRef.observe( .value, with: { (snapshot) in
for child in snapshot.children {
guard let snapshot = child as? DataSnapshot else { continue }
let person = Person(from: snapshot)
self.person = person
PersonManager.shared.addPerson(person)
}
self.kolodaView.reloadData()
})
}
答案 0 :(得分:0)
尝试更改您的功能,如下所示:
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath)
let person = PersonManager.shared.persons[indexPath.row]
//Returns the first persons first name as it is supposed to
cell.textLabel?.text = person.firstName
}
问题是您的变量kolodaView.currentCardIndex
始终为0
,它永远不会显示其他结果,而是集合中的第一个。
indexPath.row
用于控制您需要的索引。
答案 1 :(得分:0)
可能你应该尝试indexPath.item,而不是row(那是UITableView)
确保
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: “cell”,用于:indexPath)
细胞不是零。你应该打印每个单元格。如果它是零,你不能将你的数据放在零UICollectionViewCell中。 所以添加代码
if(cell == nil)cell = [UICollectionViewCell new];
答案 2 :(得分:0)
我想:
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return PersonManager.shared.persons.count
}
在cellForItem中,您应该使用indexPath.row
而不是kolodaView.currentCardIndex
,除非这确实是您需要的(非常奇怪)。
如果是这样,请检查PersonManager是否每次都附加相同的Person,这样每次只能为您提供第一个项目。仔细检查一下,因为没有其他原因