如何在表格视图单元格中加载内容视图?

Posted

技术标签:

【中文标题】如何在表格视图单元格中加载内容视图?【英文标题】:How to load content view inside a tableview cell? 【发布时间】:2015-03-19 11:06:50 【问题描述】:

我已经创建了一个表格视图

 var tblView : UITableView = UITableView()
        tblView.frame = CGRectMake(0, 168, 320-50 , 450)
        tblView.separatorColor = UIColor.clearColor()
        tblView.scrollEnabled = false
        tblView.rowHeight = 39
        self.addSubview(tblView)
        tblView.delegate = self
        tblView.dataSource = self
        tblView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "myCell")

现在我正在尝试将自定义视图添加到 tableviewcell

 //MARK:  table view data source methods
    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 

     var cell : UITableViewCell = tableView.dequeueReusableCellWithIdentifier("myCell") as UITableViewCell
     var cellImgView:UIImageView = UIImageView()
     cellImgView.frame = CGRectMake(cell.contentView.frame.origin.x+10, cell.contentView.frame.size.height, 20, 20)
     let cellImage = UIImage(named: self.cellImgs[indexPath.row])
     cell.backgroundColor = UIColor(red: 0.000, green: 0.400, blue: 0.404, alpha: 1.00)
     cellImgView = UIImageView(image: cellImage)
     cell.contentView.addSubview(cellImgView)
     return cell
 

只有第一张图片在正确的位置,其他的都是重叠的。为什么会这样?

【问题讨论】:

【参考方案1】:

cellForRowAtIndexPath 将在每次用户看到单元格时调用。 但是您只需要添加一次 UIImageView 。所以,你需要检查一下,是否有第一个电话。

另外,使用自定义 UITableViewCell 也是一个好习惯

【讨论】:

不能修复它。正如你所说,我尝试使用 Switch Case 检查 indexpath.row 和 case 0 我初始化了 imageview。 不,我不是这个意思。创建 UITableViewCell 子类。将 UIImageView 添加到其中。在 cellForRow 中,仅当它尚未创建时才分配此 UIImageView。【参考方案2】:

Tableview 正在重用创建的单元格,因此您的方法不是最好的。您现在要做的是在每次使用单元格时创建 UIImageView,如果它的单元格将被重用,您将在之前的单元格之上创建新的 UIImageView。

我建议在界面生成器中完成所有这些操作。如果你不想,至少继承 UITableViewCell 并在你的单元格的 init 方法中创建图像视图,这将处理 UIImageviews 相互重叠,但仍然考虑使用界面构建器,它是构建 tableviews 的最简单方法。

编辑

这里有一些关于界面生成器中表格视图的教程,这应该可以帮助您入门:http://shrikar.com/blog/2015/01/17/uitableview-and-uitableviewcell-customization-in-swift/

祝你好运!

【讨论】:

为了重用创建的单元格,我必须滚动表格视图,并且只有新的单元格才会使第一个单元格出列? @anishparajuli 基本上,它会在您滚动时重用单元格,这就是您的问题在于在已经存在的图像视图上创建新的图像视图(如果您确实在表格视图中滚动),无论哪种方式你都会需要继承 UITableViewCell() 但我试图让用户在单击一行后转到下一个视图控制器。而且我不需要太多行,所以我禁用了滚动属性

以上是关于如何在表格视图单元格中加载内容视图?的主要内容,如果未能解决你的问题,请参考以下文章

在表格视图单元格中加载和缓存多个 UIImageView 不起作用

如何在uitableview中加载数据而不每次都重新加载

表格视图显示空单元格

在表格视图单元格中显示活动指示器

在一个单元格中加载多个 Xib 视图

CollectionView 单元格未在视图控制器中加载