UIImage 没有出现在 UITableView (Swift) 的原型单元格中

Posted

技术标签:

【中文标题】UIImage 没有出现在 UITableView (Swift) 的原型单元格中【英文标题】:UIImage not appearing in prototype cells in UITableView (Swift) 【发布时间】:2015-08-07 19:12:34 【问题描述】:

我创建了一个包含 10 个单元格的 UITableView,每个单元格都使用 auto-layout 附加了一个 UIImageView

表格由代码填充到我的 BackTableViewController 中:

TableArray = ["Home Page", "Membership Card", "Recent News", "Fitness  Schedule", "Training Log", "Pool Lap Calculator", "Martial Arts Schedule", "Pool Schedule", "Comments", "Acknowledgements"]

问题是在运行时选择单元格之前,这些图像都不会出现在表格中。我不知道为什么会这样……有人吗?

谢谢

编辑:BackTableViewController

导入 UIKit

类 BackTableViewController: UITableViewController

var TableArray = [String]()

var ImageArray = [String]()

override func viewDidLoad() 
    super.viewDidLoad()

    TableArray = ["Home Page", "Membership Card", "Recent News", "Fitness Schedule", "Training Log", "Pool Lap Calculator", "Martial Arts Schedule", "Pool Schedule", "Comments", "Acknowledgements"]

    ImageArray = ["home-50.png","credit_card-50.png","info-50.png","math-50.png","news-50.png","report_card-50.png","weightlift-50.png"]

    // Do any additional setup after loading the view.


override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
    return TableArray.count


override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 

    var cell = tableView.dequeueReusableCellWithIdentifier(TableArray[indexPath.row], forIndexPath: indexPath) as! UITableViewCell

    cell.textLabel?.text = TableArray[indexPath.row]

    return cell



【问题讨论】:

原型单元格的工作方式并不完全符合我的预期。你有使用 tableview 的经验吗?所以我可以尝试提供足够详细的答案。您是否已将所有 tableview 数据源和委托连接到该类,还需要在属性部分中为单元格提供一个标识符。 数据源和委托被连接到整个表格视图。此外,还为与我在 BackTableViewController 中设置的数组对应的每个单元格提供了单元格标识符。 ...这些图像出现在表格中,直到单元格被选中。这到底是什么意思? 请分享您的BackTableViewController代码 BackTableViewController 添加了,当我说在选择单元格之前图像不会出现,我的意思是在用户点击或按住它之前,图像是不可见的,但是一旦他们只要他们拿着它就会出现。 【参考方案1】:

您只需要 一个 带有重用标识符的原型单元。线索在名称“原型”中。将它们视为所有细胞的蓝图。

在您的视图控制器类中(如果它是 UITableViewContoller,则应该是 UITableViewDelegate)您使用此方法指定行数:

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
    return yourArray.count

这是负责在表格的右行显示正确信息的方法。

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 

    //We create a cell from our prototype that we gave an identifier to in our storyborad.
    let cell = tableView.dequeueReusableCellWithIdentifier("ItemCell") as! UITableViewCell

    //Create a single instance of an item from our items array. we use the indexpath.row that was passed into this method as the index for the array.
    let item = yourArray[indexPath.row]

    //You can go into your array and get the right info out regarding this row by using the indexPath.row
    cell.textLabel?.text = item
    cell.imageView?.image = UIImage(named: item)

    //Finally this method returns the correctly configured cell fro the tableview to display.
    return cell

希望这会有所帮助。

【讨论】:

这似乎是要走的路...我使用您的方法正确设置了它,但是当我运行我的应用程序时,我现在收到“致命错误:数组索引超出范围”。 没关系,伙计,我把代码搞砸了,然后忘了考虑我没有足够的图像来适应我的单元格的事实,因此出现了超出范围的错误。感谢大家的帮助!【参考方案2】:

尝试为图像视图提供“Center x”约束而不是前导空间,并且您还应该对其进行宽度和高度约束。

【讨论】:

不幸的是,这并没有做任何事情......在选择单元格之前仍然看不到图像。【参考方案3】:

您需要在 Attributes Inspector 中使用 Interface Builder 设置您的单元格标识符:

然后在您的cellForRowAtIndexPath 中,您需要传递您之前设置的单元格标识符,如下所示:

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 
   // set the identifier cell, not TableArray[indexPath.row]
   var cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! UITableViewCell
   cell.textLabel?.text = TableArray[indexPath.row]
   return cell

希望对你有所帮助。

【讨论】:

以上是关于UIImage 没有出现在 UITableView (Swift) 的原型单元格中的主要内容,如果未能解决你的问题,请参考以下文章

Swift - UITableView 没有放置 UIimage=nil

仅在单元格中的特定 UIImage 上从 UITableView 推送详细信息视图?

UITableview、SDWebImage、cell复用和UIImage问题

从 NSData 转换到 UIImage 很慢,阻塞 UITableView

UIImage 替换为另一个不平滑的 UIImage

UITableView似乎没有链接到我的assets.sxassets图像文件夹?