Swift:如何在UICollectionViewCell中使用“prepareForSegue”?

时间:2016-08-18 08:02:40

标签: ios uitableview uicollectionview segue

我在UITableView中有一个UICollectionView,我想在用户点击UICollectionViewCell时链接另一个ViewController。在UITableViewCell内部,我从Internet下载了所有数据并存储在一个数组中。我通过控件创建了一个Segue,将CollectionViewCell拖到新的ViewController并选择“Push”。在新的ViewController中,我添加了一个UIImageView的IBOutlet,用于在用户点击缩略图时显示CollectionViewCell的图像。现在,当我点击CollectionViewCell时,它会转到新的ViewController,但没有显示的图片。这是我的代码,有什么建议吗?

在UITableViewConroller中:

import UIKit

class HomePageTableViewController: UITableViewController {
    let sections: NSArray = ["latest news", "good news"]
    var posts1: [Posts] = [Posts]()

override func viewDidLoad() {
    super.viewDidLoad()


}

override func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
  if section < sections.count{
        return sections[section] as? String
    }

    return nil

}

override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
    return sections.count
}

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

    return 1
}

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    if indexPath.row == 0 && indexPath.section == 0 {
        let tableViewCell = tableView.dequeueReusableCellWithIdentifier("TableViewCell") as! TableViewCell

        tableViewCell.getCategories()
     //   tableViewCell.scrollToNextCell()
     //   tableViewCell.startTimer()


        return tableViewCell

    }

在TableViewCell中,这里是代码:

import UIKit
import Alamofire
import AlamofireImage


class TableViewCell: UITableViewCell, UICollectionViewDataSource, 

UICollectionViewDelegate {

var posts1: [Posts] = [Posts]()
var posts2: [Posts] = [Posts]()
var categories: [Category] = [Category]()
var selectedPost1: Posts?

@IBOutlet weak var theCollectionView: UICollectionView!

我从JSON下载所有数据并将它们放在这些数组中。在这堂课里面,我也试着调用这个函数:

func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {
    print("selected")
    self.selectedPost1 = self.posts1

}
当我点击一个单元格时,打印工作,但我不能在此功能中使用“prepareForSegue”。我查了一下,发现这个函数只能在ViewController中使用,但我怎么能这样做呢?

在新的ViewController中,这里是代码:

import UIKit

class DetailViewController: UIViewController {

@IBOutlet weak var postImageView: UIImageView!

var posts: [Posts] = [Posts]()
var selectedPost: Posts?

override func viewDidLoad() {
    super.viewDidLoad()

}

override func viewDidAppear(animated: Bool) {
    if let post = self.selectedPost{
        let thumbnailUrlString = post.postThumbnailUrlString
        let imageUrl: NSURL = NSURL(string: thumbnailUrlString)!
        print(thumbnailUrlString)
        postImageView.af_setImageWithURL(imageUrl)
    }
}


}

因为当我下载数据时,我将它们放入2个不同的数组:posts1和posts2。我想在新的ViewController中显示相应的图像。但我刚刚创建了一个“selectedPost”数组,我不确定是不是问题?我不确定我是否将数据重新加载到“selectedPost”数组,也许这就是为什么没有显示图像?真希望有人能给我一些建议。谢谢

1 个答案:

答案 0 :(得分:0)

您应该使用prepareForSegue:。您需要做的是在您选择单元格时设置var selectedIndexPath。然后在prepareForSegue:中,您可以访问单元格及其属性,即:

HomePageTableViewController: UITableViewController {
   var selectedIndexPath: NSIndexPath?

   func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {
      selectedIndexPath = indexPath
   }

   public override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
      super.prepareForSegue(segue, sender: sender)
      let cell = theCollectionView.cellForItemAtIndexPath(selectedIndexPath)
      //do what you need to do
   }
}