【问题标题】:Image not showing in a table cell图片未显示在表格单元格中
【发布时间】:2020-04-27 02:42:26
【问题描述】:

我是 Swift 新手,正在尝试创建一个表格,在每个单元格中显示一个图像,但该图像没有显示。

首先,我创建一个“Meme”结构:

struct Meme {
    var topText: String
    var bottomText: String
    var originalImage: UIImage
    var memedImage: UIImage

    init(topText: String, bottomText: String, originalImage: UIImage, memedImage: UIImage) {
        self.topText = topText
        self.bottomText = bottomText
        self.originalImage = originalImage
        self.memedImage = memedImage
    }
}

其次,我将var memes = [Meme]() 放入AppDelegate。这是按照教程的说明进行的。

第三,我通过以下方式附加结构的实例:

    @IBAction func shareButton(_ sender: UIBarButtonItem) {

        if let topText = topTextField.text, let bottomText = bottomTextField.text {

            let memedImage = generateMemedImage()
            let finishedMeme = Meme(topText: topText, bottomText: bottomText, originalImage: imageView.image!, memedImage: memedImage)
            let ac = UIActivityViewController(activityItems: [memedImage], applicationActivities: nil)
            present(ac, animated: true, completion: nil)
            ac.completionWithItemsHandler = { activity, success, items, error in
                if success {
                    let object = UIApplication.shared.delegate
                    let appDelegate = object as! AppDelegate
                    print(finishedMeme)
                    appDelegate.memes.append(finishedMeme)
                    return
                } else {
                    print("cancel")
                }
                if let shareError = error {
                    print("error while sharing: \(shareError.localizedDescription)")
                }
            }
        }
    }

print(finishedMeme) 这里表明正在附加正确的数据。

最后,我有ViewController

    var memes = [Meme]()
    let appDelegate = UIApplication.shared.delegate as! AppDelegate

    override func viewDidLoad() {
        super.viewDidLoad()
        self.tableView.reloadData()
        memes = appDelegate.memes
    }

    override func numberOfSections(in tableView: UITableView) -> Int {
        return 1
    }

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

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "TableViewCell", for: indexPath) 
        let meme = self.memes[indexPath.row]
        cell.imageView?.image = meme.memedImage
        return cell
    }

应用程序运行时不会崩溃,但任何单元格上都没有显示图像。我确实在控制台中看到了一条消息:

Meme[7928:464364] [ShareSheet] 连接无效

我已尝试将单元格设置为默认类 UITableViewCell,还尝试创建自定义类并将重新加载的数据分配给这些属性,但似乎都不起作用:

class TableViewCell: UITableViewCell {

    @IBOutlet weak var cellLabel: UILabel!
    @IBOutlet weak var memeImageView: UIImageView!

}

【问题讨论】:

  • 您是否进行了以下操作? 1)在numberOfRowsInSection 打印 memes.count 确保你的 memes 有项目 2)将约束添加到自定义 UITableViewCell 元素
  • UITableViewCell 来自默认的UITableViewControllernumberOfRowsInSection 显示 0。这告诉我 appDelegate.memes.append(finishedMeme) 这不起作用或 let appDelegate = UIApplication.shared.delegate as! AppDelegate 这不起作用。不知道如何解决这个问题。

标签: ios swift uitableview struct delegates


【解决方案1】:

在您的 ViewController 中,在将数据添加到数组之前,您已经重新加载了 tableview 数据,请使用以下代码

 memes = appDelegate.memes
 self.tableView.reloadData()

而不是

 self.tableView.reloadData()
 memes = appDelegate.memes

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-20
    相关资源
    最近更新 更多