У меня есть один класс под названием «Коллекции». В этом классе у меня есть несколько столбцов для «name», «location», «image1», «image2», «image3» и «image4».Несколько изображений изображений Parse.com, отображаемых в Collectionview?
Если бы я имел дело только с одним изображением и столом, у меня не было бы проблем. Но я выхожу за пределы того, что знаю сейчас, и, похоже, не могу найти ни одного примера, касающегося Свифта. Я вижу, что упоминание о том, что использование небольшого количества файлов/изображений в столбце в порядке (3-4, как я это делаю), и если вы используете больше, чтобы сделать отношение (что бы это ни было).
К сожалению, я не нашел примеров того, как фактически вытащить изображения (если они существуют).
Код ниже, но все, что он делает, это вытащить изображение image1, так как я не знаю, как получить изображение2, image3 и image4 в представлении коллекции.
... Удаляется кучу неработающего кода здесь ...
Добавление нового кода здесь:
Вот переменные:
class ParseCollectionViewController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate, UISearchBarDelegate {
var currentObject : PFObject?
var collectionImages: [PFFile]?
var tappedObjectID: String!
var imageObject0: PFFile!
var imageObject1: PFFile!
var imageObject2: PFFile!
var imageObject3: PFFile!
var imageObject4: PFFile!
var imageObject5: PFFile!
var imageArray: [UIImage] = []
var collectionImage0: UIImage!
var collectionImage1: UIImage!
var collectionImage2: UIImage!
var collectionImage3: UIImage!
var collectionImage4: UIImage!
var collectionImage5: UIImage!
var imageView: PFImageView!
Вот очень некрасиво немного кода ... Я уверен, что это идеальная работа для массива, но я не знаю, как это сделать:
func loadCollectionViewData() {
// Build a parse query object
var query = PFQuery(className:"Collections")
query.whereKey("objectId", equalTo:tappedObjectID)
query.findObjectsInBackgroundWithBlock({
(objects: [AnyObject]?, error: NSError?) -> Void in
if error == nil {
println("Successfully retrieved \(objects!.count) records.")
self.imageArray.removeAll(keepCapacity: true)
for object in objects! {
self.imageObject0 = object["image0"] as! PFFile
self.imageObject0.getDataInBackgroundWithBlock({
(imageData: NSData?, error: NSError?) -> Void in
if error == nil {
self.collectionImage0 = UIImage(data:imageData!)!
println("Image0 successfully retrieved")
println(self.collectionImage0)
}
self.imageArray.append(self.collectionImage0)
self.collectionView.reloadData()
println("image0 imageArray: \(self.imageArray)")
})
self.imageObject1 = object["image1"] as! PFFile
self.imageObject1.getDataInBackgroundWithBlock({
(imageData: NSData?, error: NSError?) -> Void in
if error == nil {
self.collectionImage1 = UIImage(data:imageData!)!
println("Image1 successfully retrieved")
println(self.collectionImage1)
}
self.imageArray.append(self.collectionImage1)
self.collectionView.reloadData()
println("image1 imageArray: \(self.imageArray)")
})
self.imageObject2 = object["image2"] as! PFFile
self.imageObject2.getDataInBackgroundWithBlock({
(imageData: NSData?, error: NSError?) -> Void in
if error == nil {
self.collectionImage2 = UIImage(data:imageData!)!
println("Image2 successfully retrieved")
println(self.collectionImage2)
}
self.imageArray.append(self.collectionImage2)
self.collectionView.reloadData()
println("image0 imageArray: \(self.imageArray)")
})
self.imageObject3 = object["image3"] as! PFFile
self.imageObject3.getDataInBackgroundWithBlock({
(imageData: NSData?, error: NSError?) -> Void in
if error == nil {
self.collectionImage3 = UIImage(data:imageData!)!
println("Image3 successfully retrieved")
println(self.collectionImage3)
}
self.imageArray.append(self.collectionImage3)
self.collectionView.reloadData()
println("image3 imageArray: \(self.imageArray)")
})
self.imageObject4 = object["image4"] as! PFFile
self.imageObject4.getDataInBackgroundWithBlock({
(imageData: NSData?, error: NSError?) -> Void in
if error == nil {
self.collectionImage4 = UIImage(data:imageData!)!
println("Image4 successfully retrieved")
println(self.collectionImage4)
}
self.imageArray.append(self.collectionImage4)
self.collectionView.reloadData()
println("image4 imageArray: \(self.imageArray)")
})
self.imageObject5 = object["image0"] as! PFFile
self.imageObject5.getDataInBackgroundWithBlock({
(imageData: NSData?, error: NSError?) -> Void in
if error == nil {
self.collectionImage5 = UIImage(data:imageData!)!
println("Image0 successfully retrieved")
println(self.collectionImage5)
}
self.imageArray.append(self.collectionImage5)
self.collectionView.reloadData()
println("image5 imageArray: \(self.imageArray)")
})
}
} else {
NSLog("Error: %@ %@", error!, error!.userInfo!)
}
})
self.collectionView.reloadData()
}
и вот клетка материал:
func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return imageArray.count
}
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCellWithReuseIdentifier("cell", forIndexPath: indexPath) as! ParseCollectionViewCell
cell.cellImage.image = UIImage(named: "question")
cell.cellImage.image = imageArray[indexPath.row]
return cell
}
func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {
let tappedObject = imageArray[indexPath.row]
performSegueWithIdentifier("CollectionViewToDetailView", sender: tappedObject)
}
// In a storyboard-based application, you will often want to do a little preparation before navigation
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
var detailObject : PFObject?
if let imageArray = sender as? PFObject{
detailObject = sender as? PFObject
} else {
// No cell selected in collectionView
detailObject = PFObject(className:"Collections")
}
// Get a handle on the next story board controller and set the currentObject ready for the viewDidLoad method
var detailScene = segue.destinationViewController as! ParseDetailViewController
detailScene.detailObject = (detailObject)
detailScene.currentObject = (currentObject)
}
Из-за случайной загрузки, я либо должен выяснить, как заставить изображения для загрузки в определенном порядке, или я должен выяснить, какой образ, который, когда я нажимаю на нем, поэтому я могу правильно передать его на следующий диспетчер представлений, который является диспетчером подробных представлений.
Я не уверен, я понимаю. Мой UIImageView установлен в моем пользовательском файле UICollectionViewCell. Я бы хотел создать сетку размером 2 x 2 с каждой ячейкой, содержащей одно изображение. Когда я нажимаю на изображение, он нажимает на контроллер detailview, где у меня будет возможность изменить изображение. У меня есть сетка, и выяснилось, что толчок. Я также уверен, что знаю, как изменить и обновить изображение. Но я не могу понять, как отобразить отдельные строки «файла» и заполнить их сеткой. Я просто получаю одно изображение image1. – BrianSD
В вашем пользовательском файле UICollectionViewCell добавьте UIImageViews для размещения других файлов изображений. –
Не будет ли это застревание всех изображений в одну ячейку вместо создания сетки отдельных и отдельных клеток коллекции, каждый со своим собственным изображением (image1 для первого, image2 для второго и т. Д.)? Мне нужна каждая ячейка только для того, чтобы иметь одно изображение на ячейку, потому что я планирую нажать на ячейку и передать ее в блок управления detailview, показывающий только одно изображение. – BrianSD