alemac852
alemac852

Reputation: 109

uicollectionview segue to detail viewcontroller swift

//
//  ViewController.swift
//  Fashun
//
//  Created by Alex Macleod on 20/10/14.
//  Copyright (c) 2014 Alex Macleod. All rights reserved.
//

import UIKit

class ViewController: UIViewController, UICollectionViewDelegateFlowLayout, UICollectionViewDataSource {

var collectionView: UICollectionView?

var instanceOfCustomObject: CustomObject = CustomObject()
var accessToken: NSString! = "1570900151.c2711e8.75915e1949da40f395bf22e17101b43d"
//var userDefaults: NSUserDefaults!
let colorWheel = ColorWheel()
var photoCount: Int! = 0
let photos = NSMutableArray()

    class PhotoAndData {
        var img: UIImage = UIImage()
        var date: Int = 0
        var likes: Int = 0
        var userLikePct: Float = 0
        init(){
        }
    }

override func viewDidLoad() {

    super.viewDidLoad()

//    userDefaults = NSUserDefaults.standardUserDefaults()
//    self.accessToken = userDefaults!.objectForKey("accessToken") as NSString
//    println(self.accessToken)

//        instanceOfCustomObject.someProperty = "Hello World"
//        var accessToken : NSString? = NSString(instanceOfCustomObject.accessToken)
//        println(accessToken)
//    println("viewDidLoad")
//    instanceOfCustomObject.simpleAuth()
    instanceOfCustomObject.authorize()

// Do any additional setup after loading the view, typically from a nib.
    let layout: UICollectionViewFlowLayout = UICollectionViewFlowLayout()
//        layout.sectionInset = UIEdgeInsets(top: 20, left: 0, bottom: 0, right: 0)
    layout.itemSize = CGSize(width: 124, height: 124)
    layout.minimumInteritemSpacing = 1.0
    layout.minimumLineSpacing = 1.0
    collectionView = UICollectionView(frame: self.view.frame, collectionViewLayout: layout)
    collectionView!.dataSource = self
    collectionView!.delegate = self
    collectionView!.registerClass(Cell.self, forCellWithReuseIdentifier: "Cell")
    collectionView!.backgroundColor = UIColor.whiteColor()
    self.view.addSubview(collectionView!)


    getData()
//    imageCount()

}

    func getData() -> Void {
////
        let tuulavintageUrl = NSURL(string:"https://api.instagram.com/v1/users/7522782/media/recent/?access_token=\(self.accessToken)")
        let wendyslookbookUrl = NSURL(string:"https://api.instagram.com/v1/users/14454619/media/recent/?access_token=\(self.accessToken)")
//        
//        let sharedSession = NSURLSession.sharedSession()
//        let downloadTask: NSURLSessionDownloadTask = sharedSession.downloadTaskWithURL(baseUrl!, completionHandler: { (location: NSURL!, response: NSURLResponse!, error: NSError!) -> Void in

//            var urlContents = NSString.stringWithContentsOfURL(location, encoding: NSUTF8StringEncoding, error: nil)
//            println(urlContents)

            let tuulavintageData = NSData(contentsOfURL: tuulavintageUrl!)
            let wendyslookbookData = NSData(contentsOfURL: wendyslookbookUrl!)

            if (tuulavintageData != nil) & (wendyslookbookData != nil) {

                dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), {

                    let tuulavintageDictionary: NSDictionary = NSJSONSerialization.JSONObjectWithData(tuulavintageData!, options: nil, error: nil) as NSDictionary
                    var tuulavintageImageResponse = tuulavintageDictionary.valueForKeyPath("data.images.standard_resolution.url") as NSArray
                    var tuulavintageTimeResponse = tuulavintageDictionary.valueForKeyPath("data.created_time") as NSArray
                    var tuulavintageLikeResponse = tuulavintageDictionary.valueForKeyPath("data.likes.count") as NSArray
//                    println(tuulavintageTimeResponse)
                    self.addToPhotoArray(tuulavintageImageResponse, times: tuulavintageTimeResponse, likes: tuulavintageLikeResponse)

                    let wendyslookbookDictionary: NSDictionary = NSJSONSerialization.JSONObjectWithData(wendyslookbookData!, options: nil, error: nil) as NSDictionary
                    var wendyslookbookImageResponse = wendyslookbookDictionary.valueForKeyPath("data.images.standard_resolution.url") as NSArray
                    var wendyslookbookTimeResponse = wendyslookbookDictionary.valueForKeyPath("data.created_time") as NSArray
                    var wendyslookbookLikeResponse = wendyslookbookDictionary.valueForKeyPath("data.likes.count") as NSArray
                    //                    println(wendyslookbookTimeResponse)
                    self.addToPhotoArray(wendyslookbookImageResponse, times:wendyslookbookTimeResponse, likes:wendyslookbookLikeResponse)

                    self.photos.sortUsingComparator({ (a, b) -> NSComparisonResult in
                        let x = a as PhotoAndData
                        let y = b as PhotoAndData
                        if  x.userLikePct < y.userLikePct {
                            return NSComparisonResult.OrderedDescending
                        }
                        return NSComparisonResult.OrderedAscending
                    })
//
                    dispatch_async(dispatch_get_main_queue(), { () -> Void in

                        self.photoCount = tuulavintageImageResponse.count + wendyslookbookImageResponse.count as Int

                        self.collectionView?.reloadData()

                    })
                })

            } else {

                let networkIssueController = UIAlertController(title: "Error", message: "Something went wrong get a better phone you pleb!", preferredStyle: .ActionSheet)
                let okButton = UIAlertAction(title: "OK", style: .Default, handler: nil)
                networkIssueController.addAction(okButton)
                let cancelButton = UIAlertAction(title: "Cancel", style: .Cancel, handler: nil)
                networkIssueController.addAction(cancelButton)

                self.presentViewController(networkIssueController, animated: true, completion: nil)

                dispatch_async(dispatch_get_main_queue(), { () -> Void in
                    //Stop refresh animation

                })
            }
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return photoCount
    }

    func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
        let cell = collectionView.dequeueReusableCellWithReuseIdentifier("Cell", forIndexPath: indexPath) as Cell
    //                println(photos)
    //            cell.textLabel.text = "Text"
        var indexToUse = indexPath.row
        if indexPath.row >= photos.count {
            indexToUse = photos.count - 1
        }
        let data = photos.objectAtIndex(indexToUse) as PhotoAndData
        cell.imageView.image =  data.img as UIImage
    //    cell.photo = self.photos[indexPath.row] as? NSDictionary
//        cell.imageView.backgroundColor = colorWheel.randomColor()

        return cell
    }

I am calling Instagrams API, parsing for some Images then putting them into my collectionview which is a bunch of squares just like instagrams app. How do I segue to a NEW "detailed view controller" when I TAP on one of my collection view cells programatically?

Upvotes: 0

Views: 3984

Answers (2)

ismailtsn92
ismailtsn92

Reputation: 21

Step 1 : creat var indexPath: IndexPath? and array to keep your image in detail view page

step 2: write this code to your view

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

    if let detailPage = segue.destination as? DetailPage {
        let cell = sender as! MyCollectionViewCell
        let indexPath = self.MyCollectionView.indexPath(for: cell)
        detailPage.indexPath = indexPath
        detailPage.YourArray = self.YourDetailPageArray
    }
}

Upvotes: 1

S.H.
S.H.

Reputation: 2853

you need to add the UICollecitonViewDelegate (or something named similar to that) to that ViewController and define this method:

//MARK: - UICollectionViewDelegate

func collectionView(collection: UICollectionView, selectedItemIndex: NSIndexPath) 
{
   //As sender send any data you need from the current Selected CollectionView
   self.performSegueWithIdentifier("identifier", sender: self)
}

Now just let it through or get the SegueController and set data to that new Controller that you need.

override func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!) {
    segue.desntinationViewController  as MySegueViewController//(Your Segue View Controller)
        // pass data to next view


}

PS: Since i am not in my Mac there might be some syntax error on the names of the methods Please use the Editor or text Completer to help you determine the correct name.

But with this is all you need to call the Segue Controller. Also remember to set up the Segue identifier name in the Storyboard file or it won't work correctly.

Upvotes: 1

Related Questions