我已经构建了一个meme生成器,并将处理meme创建的视图控制器嵌入到一个选项卡栏视图控制器中。第一个选项卡显示一个表视图,我试图让表视图在通过活动视图保存后显示meme。我已经在我的App Delegate文件中添加了一个meme数组(我知道这是有争议的,但这是本练习的要求),并且我已经确认meme正在被保存并传递到App Delegate文件。
每当用户创建一个新的meme时,我想在table视图中显示保存的meme的图像和文本。这是我所拥有的,但这不起作用。
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是指向回购协议的链接。
最佳答案
当您在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 mugnani提到的,您需要为您的表视图连接
IBOutlet
:@IBOutlet weak var tableView:UITableView!