Reputation: 109
//
// 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
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
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