图片未显示在 table 单元格中
Image not showing in a table cell
我是 Swift 的新手,我正在尝试创建一个 table 在其每个单元格中显示图像,但图像未显示。
首先,我创建一个 "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] connection invalidated
我已经尝试将单元格设置为默认值 class UITableViewCell
并且还尝试创建自定义 class 并将重新加载的数据分配给这些属性,但是 none 似乎有效:
class TableViewCell: UITableViewCell {
@IBOutlet weak var cellLabel: UILabel!
@IBOutlet weak var memeImageView: UIImageView!
}
在你的 ViewController 中,你在将数据添加到数组之前重新加载了 tableview 数据,使用下面的代码
memes = appDelegate.memes
self.tableView.reloadData()
而不是
self.tableView.reloadData()
memes = appDelegate.memes
我是 Swift 的新手,我正在尝试创建一个 table 在其每个单元格中显示图像,但图像未显示。
首先,我创建一个 "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] connection invalidated
我已经尝试将单元格设置为默认值 class UITableViewCell
并且还尝试创建自定义 class 并将重新加载的数据分配给这些属性,但是 none 似乎有效:
class TableViewCell: UITableViewCell {
@IBOutlet weak var cellLabel: UILabel!
@IBOutlet weak var memeImageView: UIImageView!
}
在你的 ViewController 中,你在将数据添加到数组之前重新加载了 tableview 数据,使用下面的代码
memes = appDelegate.memes
self.tableView.reloadData()
而不是
self.tableView.reloadData()
memes = appDelegate.memes