如何在表格视图单元格中加载内容视图?
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() 但我试图让用户在单击一行后转到下一个视图控制器。而且我不需要太多行,所以我禁用了滚动属性以上是关于如何在表格视图单元格中加载内容视图?的主要内容,如果未能解决你的问题,请参考以下文章