我在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”数组,也许这就是为什么没有显示图像?真希望有人能给我一些建议。谢谢
答案 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
}
}