找出带有detailTextLabel的UITableViewCells

时间:2014-11-28 15:20:49

标签: uitableview text swift xcode6 detailtextlabel

我想找出所有UITableViewCells(编号各不相同),其中有一个detailTextLabel,文字为" Done"在里面。我怎么能在Swift中做到这一点?

1 个答案:

答案 0 :(得分:0)

你不应该这样做。无论是在Swift还是在任何其他语言中。您应该查询dataSource,因为这是存储真实状态的位置。如果您在屏幕外滚动一个单元格,则会重复使用该文本,并将文本设置为其他内容。你不能依赖这些信息。更糟糕的是,如果您依赖单元格中的文本,您永远无法全面了解您的dataSource,因为屏幕外的单元格根本不存在。

以下是您应该执行的操作:在代码中的某处,您可以根据对象的状态将文本设置为"Done"。使用相同的决定来查找已完成的所有对象。

例如,如果你的对象有一个isDone getter,你希望使用这样的东西来创建单元格:

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("ProjectCell", forIndexPath: indexPath) as ProjectCell

    let project = allProjects[indexPath.row]
    if project.isDone {
        cell.detailTextLabel?.text = "Done"
    }
    else {
        cell.detailTextLabel?.text = nil
    }
    return cell
}

您可以看到,如果将显示isDone文字,您可以根据"Done"决定。

因此,您可以创建一个使用相同测试的函数来创建一个仅包含已完成项目的数组。

func projectsThatAreDone(allProjects: [Project]) -> [Project] {
    let matchingProjects = allProjects.filter {
        return $0.isDone
    }
    return matchingProjects
}

然后使用let doneProjects = projectsThatAreDone(allProjects)