Swift3 如何在Swift中显示集合视图上的图像阵列
如何在UICollectionViewCell上显示带有键Swift3 如何在Swift中显示集合视图上的图像阵列,swift3,uicollectionview,uicollectionviewcell,uicollectionviewlayout,Swift3,Uicollectionview,Uicollectionviewcell,Uicollectionviewlayout,如何在UICollectionViewCell上显示带有键gallery\u images的图像阵列?此行print(“gallery images key:\(gallerySingle)”)在控制台上打印所需的图像阵列,但我无法在collectionView上显示。我的JSON响应为。我在我的项目中也使用了SDWebImage。我已经检查了datasourceconnection&collectionViewIBoutlet以及单元格内的图像。我是Swift的初学者,请提供帮助,如果需要更多
gallery\u images
的图像阵列?此行print(“gallery images key:\(gallerySingle)”)
在控制台上打印所需的图像阵列,但我无法在collectionView
上显示。我的JSON
响应为。我在我的项目中也使用了SDWebImage
。我已经检查了datasource
connection&collectionView
IBoutlet以及单元格内的图像。我是Swift的初学者,请提供帮助,如果需要更多信息,请询问
您可以使用SDWebcache实现这种方式,以在collectionView单元图像中加载图像
func numberOfSections(in collectionView: UICollectionView) -> Int {
return 1
}
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
print("gallery count : \(self.arrayGallerySingle.count)")
return self.arrayGallerySingle.count
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "gallerycell", for: indexPath) as! GalleryViewCell
return cell
}
//API Fetching method
func galleryFetch(){
let prs = [
"id": dealIDGallery,
"deal_single_page": "1" as String
]
Service.StartWithoutLoading(prs as [String : AnyObject]?, onCompletion: { result in
let jsonResponseSingle = result as? NSDictionary
print(" jsonResponse\(String(describing: jsonResponseSingle))")
if let resultGallery = jsonResponseSingle?.value(forKey: "result") as? NSArray{
for keyValuesGallery in resultGallery {
let gallerySingle = (keyValuesGallery as AnyObject).value(forKey: "gallery_images") as? NSArray
print("Gallery Images Key: \(gallerySingle)")
self.arrayGallerySingle = gallerySingle as! [AnyObject]
DispatchQueue.main.async { () -> Void in
self.collectionView?.reloadData()
}
}
}
})
}
如果要在collectionView中显示6个单元格,则必须将UICollectionViewLayout
方法设置为定义的单元格大小,如下所示
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "gallerycell", for: indexPath) as! GalleryViewCell
if let imgUrl = arrayGallerySingle[indexPath.row] as? String {
if let url = URL(string: imgUrl) {
//Replace with your imageView outlet
cell.imageView.sd_setImageWithURL(url, placeholderImage: UIImage(named: "place holder image"), options: .lowPriority)
}
}
return cell
}
当数组计数不为空时,可以显示警报,以及为什么在循环中重新加载集合视图,如下所示实现
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize
{
return CGSize(width: collectionView.frame.size.width/2, height: collectionView.frame.size.height/3)
}
swift3.0
这是我最新的答案,希望它也能帮助别人
Service.StartWithoutLoading(prs as [String : AnyObject]?, onCompletion: { result in
let jsonResponseSingle = result as? NSDictionary
print(" jsonResponse\(String(describing: jsonResponseSingle))")
if let resultGallery = jsonResponseSingle?.value(forKey: "result") as? NSArray{
for keyValuesGallery in resultGallery {
let gallerySingle = (keyValuesGallery as AnyObject).value(forKey: "gallery_images") as? NSArray
print("Gallery Images Key: \(gallerySingle)")
self.arrayGallerySingle = gallerySingle as! [AnyObject]
}
if self.arrayGallerySingle.count > 0 {
DispatchQueue.main.async { () -> Void in
self.collectionView?.reloadData()
}
} else {
let alertController = UIAlertController(title: "Your Title", message: "their is no images", preferredStyle: .alert)
alertController.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.default, handler: nil))
self.present(alertController, animated: tru, completion: nil)
}
}
})
它解决了我的问题,我想在集合视图中一次显示6个图像,不带单元格间距@Jaydeepi想显示警报也没有图像是他们的@Jaydeepi想显示警报如果他们没有图像@Jaydeep@Sunny,检查更新的答案。显示警报很简单,只需检查图像数组计数
func numberOfSections(in collectionView: UICollectionView) -> Int {
return 1
}
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
print("gallery count : \(self.arrayGallerySingle.count)")
return self.arrayGallerySingle.count
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "gallerycell", for: indexPath) as! GalleryViewCell
if let imgUrl = arrayGallerySingle[indexPath.row] as? String {
if let url = NSURL(string: imgUrl) {
cell.galleryImage?.sd_setImage(with: url as URL, placeholderImage: UIImage(named: "place holder image"), options: .lowPriority)
}
else{
let alertController = UIAlertController(title: "No Gallery Images", message: "test", preferredStyle: .alert)
let okButton = UIAlertAction(title: "Okay", style: .default, handler: nil)
alertController.addAction(okButton)
alertController.present(alertController, animated: true, completion: nil)
}
}
return cell
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets {
return UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat {
return 0.0
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat {
return 0.0
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize
{
return CGSize(width: collectionView.frame.size.width/2, height: collectionView.frame.size.height/3)
}
func galleryFetch(){
let prs = [
"id": dealIDGallery,
"deal_single_page": "1" as String
]
Service.StartWithoutLoading(prs as [String : AnyObject]?, onCompletion: { result in
let jsonResponseSingle = result as? NSDictionary
print(" jsonResponse\(String(describing: jsonResponseSingle))")
if let resultGallery = jsonResponseSingle?.value(forKey: "result") as? NSArray{
for keyValuesGallery in resultGallery {
let gallerySingle = (keyValuesGallery as AnyObject).value(forKey: "gallery_images") as? NSArray
print("Gallery Images Key: \(gallerySingle)")
self.arrayGallerySingle = gallerySingle as! [AnyObject]
if self.arrayGallerySingle.count > 0 {
DispatchQueue.main.async { () -> Void in
self.collectionView?.reloadData()
}
} else {
let alertController = UIAlertController(title: "Message", message: "No images found.", preferredStyle: .alert)
alertController.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.default, handler: self.doSomething))
self.present(alertController, animated: true, completion: nil)
}
}
}
})
}