uicollectionview segue to detail viewcontroller swift

时间:2014-11-27 15:07:25

标签: ios swift uicollectionview segue uitapgesturerecognizer

//
//  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
    }

我正在调用Instagrams API,解析一些图像,然后将它们放入我的集合视图中,就像instagrams应用程序一样。当我以编程方式在我的一个集合视图单元格上进行TAP时,如何切换到新的“详细视图控制器”?

2 个答案:

答案 0 :(得分:1)

您需要将UICollecitonViewDelegate(或类似名称的东西)添加到该ViewController并定义此方法:

//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)
}

现在让它通过或获取SegueController并将数据设置为您需要的新Controller。

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


}

PS:由于我不在我的Mac中,因此方法名称可能存在语法错误请使用编辑器或文本Completer来帮助您确定正确的名称。

但是这就是你需要调用Segue Controller的全部内容。还记得在Storyboard文件中设置Segue标识符名称,否则它将无法正常工作。

答案 1 :(得分:1)

第1步:创造 var indexPath:IndexPath? 和数组,以保持您的图像在详细视图页面

第2步: 将此代码写入您的视图

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
    }
}