使用dequeueReusableCellWithIdentifier指定单元格时,停止受影响的随机UITableViewCells

时间:2015-04-17 19:56:28

标签: ios uitableview swift

我对iOS和Swift开发很新,但到目前为止我很喜欢它。

我有一个可滚动的tableview,它包含一些由自定义结构数组填充的单元格。

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("platformCell", forIndexPath: indexPath) as! PlatformCell
    cell.platformName.text = KeyPlatformsViewController.platforms[indexPath.row].platformName
    cell.backgroundColor = UIColor(rgba: KeyPlatformsViewController.platforms[indexPath.row].platformColour)
    return cell
}

问题是我想在代码中加入这样的东西:

        if  cell.platformName.text == "A" {
            cell.backgroundColor = UIColor.whiteColor();
        }

但是对于deque cell(我认为),滚动视图后会出现错误的单元格。

有没有人知道如何确保我选择的那个受到影响?

我希望我很清楚,我认为我没有很好地解释这一点。

2 个答案:

答案 0 :(得分:2)

当你根据if语句设置某个单元格中的某个值时,你应该总是包含一个“else”子句来处理其他情况(或者其他情况,在这种情况下你需要一些if-elses)

    if  KeyPlatformsViewController.platforms[indexPath.row].platformName == "A" {
         cell.backgroundColor = UIColor.whiteColor();
    }else{
        cell.backgroundColor = ... // default color 
    }

答案 1 :(得分:0)

因为,您希望根据某些数据条件更改文本的颜色,您应该检查或验证数据(在您的情况下是数据源中的文本内容)而不是UI(单元格中设置的文本)。

所以不要检查

if cell.platformName.text == "A"

检查

if KeyPlatformsViewController.platforms[indexPath.row].platformName == "A"

这样,以MVC architecture术语,您的数据(模型)驱动您的UI(视图)。