我正在制作一个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是回购的链接。
答案 0 :(得分:2)
您有一些问题,首先您必须创建自定义CollectionViewCell:
class Cell: UICollectionViewCell {
@IBOutlet var imageView:UIImageView!
}
记得在故事板中为UICollectionViewCell设置自定义类:
然后当您将单元格出列时,请确保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
设置datasource
和CollectionViewController
(我检查过你的github,你没有附上它们)。< / p>
最后结果将是: