无法在表格视图单元格

时间:2017-12-31 16:27:54

标签: ios swift tableview

我已经构建了一个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是回购的链接。

1 个答案:

答案 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!