2015-07-28 3 views
0

У меня есть один класс под названием «Коллекции». В этом классе у меня есть несколько столбцов для «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) 
} 

Из-за случайной загрузки, я либо должен выяснить, как заставить изображения для загрузки в определенном порядке, или я должен выяснить, какой образ, который, когда я нажимаю на нем, поэтому я могу правильно передать его на следующий диспетчер представлений, который является диспетчером подробных представлений.

ответ

0

Вы должны сделать больше изображений UIImageView (или PFImageViews) для изображений в своей камере, а затем просто повторите то, что у вас есть для первого изображения для остальных (но измените их имена, чтобы они соответствовали столбцам, где они хранятся при разборе)

В качестве альтернативы вы можете реализовать PFImageViews и использовать их свойства файла & loadInBackground().

Редактировать: вы можете перебирать полученные объекты и размещать изображения в новом массиве и использовать их для своего вида коллекции.

Пример кода:

var parseOjbect = ["image1":NSData(), "image2":NSData(),"image3":NSData(),"image4":NSData()] 

var receivedParseObjects = [parseOjbect] 

var photosForCollectionView = [NSData]() 

for receivedParseObject in receivedParseObjects { 

photosForCollectionView.append(receivedParseObject["image1"]!) 
photosForCollectionView.append(receivedParseObject["image2"]!) 
photosForCollectionView.append(receivedParseObject["image3"]!) 
photosForCollectionView.append(receivedParseObject["image4"]!) 
} 
+0

Я не уверен, я понимаю. Мой UIImageView установлен в моем пользовательском файле UICollectionViewCell. Я бы хотел создать сетку размером 2 x 2 с каждой ячейкой, содержащей одно изображение. Когда я нажимаю на изображение, он нажимает на контроллер detailview, где у меня будет возможность изменить изображение. У меня есть сетка, и выяснилось, что толчок. Я также уверен, что знаю, как изменить и обновить изображение. Но я не могу понять, как отобразить отдельные строки «файла» и заполнить их сеткой. Я просто получаю одно изображение image1. – BrianSD

+0

В вашем пользовательском файле UICollectionViewCell добавьте UIImageViews для размещения других файлов изображений. –

+0

Не будет ли это застревание всех изображений в одну ячейку вместо создания сетки отдельных и отдельных клеток коллекции, каждый со своим собственным изображением (image1 для первого, image2 для второго и т. Д.)? Мне нужна каждая ячейка только для того, чтобы иметь одно изображение на ячейку, потому что я планирую нажать на ячейку и передать ее в блок управления detailview, показывающий только одно изображение. – BrianSD

Смежные вопросы