我已经构建了一个meme生成器,并且我嵌入了视图控制器,用于处理标签栏视图控制器内部的模因创建。第一个选项卡显示一个表视图,我试图通过活动视图保存该表视图后显示模因。我已将memes数组添加到我的App Delegate文件中(我知道这是有争议的,但这是本练习的要求)并且我已确认meme正在保存并传递给app delegate文件。
每当用户创建新的模因时,我想在表格视图中显示已保存的模因图像和文本。这是我拥有的,这是行不通的。
import UIKit
class TableViewMemesViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
var memes: [Meme]!
override func viewDidLoad() {
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!
}
}
我哪里错了? cellForRowAt的过程对我来说仍然是新的和令人沮丧的。 Here是回购的链接。
答案 0 :(得分:3)
当您在UITabBar
个标签页之间导航时,viewDidLoad
未被触发,只有在创建标签栏后才会触发。
为了使表格视图能够反映变化,您需要在viewWillAppear
中处理,而不是viewDidLoad
。
所以你会:
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
let appDelegate = UIApplication.shared.delegate as! AppDelegate
memes = appDelegate.memes
}
你需要像memes
这样添加一个属性观察者:
var memes: [Meme]! {
didSet {
tableView.reloadData()
}
}
编辑:正如@Andrea Mugnaini所提到的,您需要为表格视图连接IBOutlet
:
@IBOutlet weak var tableView:UITableView!