我有条件只显示几行图像。但是当我滚动时,图像也显示为其他随机行。以下是我的代码:
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath)
//var data = objectArray[indexPath.section].sectionObjects[indexPath.row] as? NSDictionary
if let data = objectArray[indexPath.section].sectionObjects[indexPath.row] as? NSDictionary{
if let name = data.objectForKey("NAME") as? String{
cell.textLabel?.text = name
}
if completedTrainings.contains((data.objectForKey("MENU_ID") as? Int)!) {
cell.imageView?.frame = CGRect(x: (cell.bounds.width-110), y: 0, width: 100, height: 100)
cell.imageView?.image = UIImage(named: "CORRECT")
}
}
return cell
}
只有在完成的训练中存在菜单ID时才会出现图像,但在滚动时,它也会出现在某些随机单元格中。图像也在左边,但它应该在右边。我怎样才能将它移到右边?
答案 0 :(得分:1)
嘿,您需要在故事板或nib文件中创建自己的自定义UITableViewCell子类,并在视图控制器中注册该nib文件。这将为您提供使用任何布局设计所需单元格的选项。您在随机单元格上看到此图像的原因是因为您的单元格正在重复使用,并且如果您没有找到图像(如果completedTrainings.contains),则不会将imageView设置为隐藏或将其图像设置为空图像(也许是你对这种情况的特殊形象)。
答案 1 :(得分:1)
因为image
是UIImageView
的可选项,如果您不想在代码中显示图片,则可以将图片设置为nil
,如vadian建议的那样
cell.imageView?.image = nil //reset the cell image first
cell.textLabel?.text = ""
if let data = objectArray[indexPath.section].sectionObjects[indexPath.row] as? NSDictionary{
if let name = data.objectForKey("NAME") as? String{
cell.textLabel?.text = name
cell.imageView?.image = nil //add this line
}
if completedTrainings.contains((data.objectForKey("MENU_ID") as? Int)!) {
cell.imageView?.frame = CGRect(x: (cell.bounds.width-110), y: 0, width: 100, height: 100)
cell.imageView?.image = UIImage(named: "CORRECT")
}
答案 2 :(得分:1)
在处理可重复使用的单元格时。尝试使用if和else两者。只有在可以提出类似问题的时候。