无法在集合视图中显示存储在App Delegate中的数组数据

时间:2017-12-31 18:55:43

标签: ios swift xcode uicollectionview

我正在制作一个meme生成器应用程序。模因生成器以模态方式呈现,并内置于标签栏视图控制器中。第一个选项卡在表视图中显示所有已保存的模因,第二个选项卡用于在集合视图中显示已保存的模因。模因生成器作为设计工作,并将生成的模因保存到位于App Delegate文件中的数组(我知道这是有争议的,但这是练习的要求)。我正在尝试设置集合视图,我无法在app委托文件中获取对meme对象的引用,我不明白为什么。

import UIKit

class CollectionViewController: UIViewController, UICollectionViewDelegate, UICollectionViewDataSource {

    @IBOutlet weak var collectionView: UICollectionView!

    var memes: [Meme]! {
        didSet {
            collectionView.reloadData()
        }
    }

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        let appDelegate = UIApplication.shared.delegate as! AppDelegate
        memes = appDelegate.memes
    }

    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return memes.count
    }

    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "Cell", for: indexPath)
        cell.imageView.image = memes[indexPath].memedImage
        return cell
    }

    func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {

    }
}

我将此代码基于用于我的表视图的代码,该代码按设计工作。该代码是:

import UIKit

class TableViewMemesViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

    @IBOutlet weak var tableView: UITableView!

    var memes: [Meme]! {
        didSet {
            tableView.reloadData()
        }
    }

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        let appDelegate = UIApplication.shared.delegate as! AppDelegate
        memes = appDelegate.memes
    }

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return memes.count
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "Cell")
        let meme = memes[indexPath.row]
        cell?.imageView?.image = meme.memedImage
        cell?.textLabel?.text = meme.topText
        return cell!
    }
}

当用户保存新的模因时,如何获取对数组数据的引用并将其显示在集合视图中? Here是回购的链接。

1 个答案:

答案 0 :(得分:2)

您有一些问题,首先您必须创建自定义CollectionViewCell:

class Cell: UICollectionViewCell {
    @IBOutlet var imageView:UIImageView!
}

记得在故事板中为UICollectionViewCell设置自定义类:

enter image description here

然后当您将单元格出列时,请确保as! Cell

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "Cell", for: indexPath) as! Cell
    cell.imageView.image = memes[indexPath.row].memedImage
    return cell
}

然后在TabBarStoryboard.storyboard内,您必须为delegate设置datasourceCollectionViewController(我检查过你的github,你没有附上它们)。< / p>

最后结果将是:

enter image description here