我不知道我做错了什么。
我有一个viewController和一个collectionView。
我已经在viewController和storyboard中设置了collectionView的代表,如下所示。
modelosCV.delegate = self
modelosCV.dataSource = self
我创建了所有的collectionView方法
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return filtrados ? modelosFiltrados.count : modelos.count
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cellModelos = collectionView.dequeueReusableCell(withReuseIdentifier: "modelo", for: indexPath) as! ModelosCollectionViewCell
print(filtrados ? modelosFiltrados[indexPath.row].icono : modelos[indexPath.row].icono)
let foto_modelo = filtrados ? modelosFiltrados[indexPath.row].icono : modelos[indexPath.row].icono
let modelo_nombre = filtrados ? modelosFiltrados[indexPath.row].nombre : modelos[indexPath.row].nombre
cellModelos.modelo_nombre.text = modelo_nombre
let url = URL(string: "https://j../iconos/"+foto_modelo)
UIImage.loadFrom(url: url!) { image in
cellModelos.modelo_icono.image = image
}
return cellModelos
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
let padding: CGFloat = 50
let collectionViewSize = collectionView.frame.size.width - padding
return CGSize(width: collectionViewSize/2, height: 242)
}
我从一个远程JSON源向CollectionView填入信息。
func downloadJSONModelos(completed: @escaping () -> ()) {
var categoria = ""
let cat = self.defaults.string(forKey: "nueva_alarma_categoria")
if (cat == "Móviles"){
categoria = "3"
}
if (cat == "Tablets"){
categoria = "5"
}
if (cat == "Smartwatches"){
categoria = "7"
}
let marca_id = self.defaults.string(forKey: "nueva_alarma_marca_id")
let url = URL(string: "https:.....php?marca="+marca_id!+"&cat="+categoria)
URLSession.shared.dataTask(with: url!) { (data,response,error) in
print(data as Any)
print(response as Any)
if error == nil {
do {
self.modelos = try JSONDecoder().decode([Modelos].self, from: data!)
DispatchQueue.main.async {
completed()
}
}catch{
}
print(self.modelos)
}
}.resume()
}
应用程序正在接收JSON数组,因为它被打印在输出中,但collectionView仍然是空的。
我到底漏了什么?
将此添加到你的 viewDidLoad
:
yourCollectionView.register(UINib(nibName: "yourXibName", bundle: nil), forCellWithReuseIdentifier: "modelo")
并重新加载你的 collectionView
与 yourCollectionView.reloadData()
在你将元素从 JSON
.
希望能帮到你...