如何根据所选单元格在tableview中设置启用的checkimage

时间:2018-01-11 16:45:43

标签: ios uitableview swift3

我从服务器获取以前选择的类别列表。比如说,我从服务器获取的example.cateogrylist是以下格式

categoryid : 2,6,12,17

现在我需要做的是想在我的tableview中根据这个类别列表启用checkmark,为此我把这个列表转换成这样的[Int]数组:

func get_numbers(stringtext:String) -> [Int] {
    let StringRecordedArr = stringtext.components(separatedBy: ",")
    return StringRecordedArr.map { Int($0)!}
}

在viewDidLoad()中:

  selectedCells = self.get_numbers(stringtext: UpdateMedicalReportDetailsViewController.catId)
  print(myselection)
打印时给我的结果如下: [12,17,6,8,10]

我想基于这个数组启用checkimage。我尝试了一些代码,同时打印它给我正确的结果,就像我在发布时选择的任何类别一样,我能够获取它但是没有放回这个选择在tableview.Requirement:当我打开这个页面时,它应该显示我根据从服务器获取的类别列表的选择。

var selectedCells : [Int] = []

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
{
    let cell1  = table.dequeueReusableCell(withIdentifier: "mycell") as! catcell

    cell1.mytext.text = categoriesName[indexPath.row] 
      if UpdateMedicalReportDetailsViewController.flag == 1
    {
          selectedCells = self.get_numbers(stringtext: UpdateMedicalReportDetailsViewController.catId)
        cell1.checkimage.image = another

        print(selectedCells)
    }
    else
    {

        selectedCells = []
        cell1.checkimage.image = myimage

    }
    return cell1

}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

    let cell = table.cellForRow(at: indexPath) as! catcell
    cell.checkimage.image = myimage
    if cell.isSelected == true
    {
        self.selectedCells.append(indexPath.row)
        cell.checkimage.image = another
    }
}
func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) {
    let cell = table.cellForRow(at: indexPath) as! catcell
    if cell.isSelected == false
    {

        self.selectedCells.remove(at: self.selectedCells.index(of: indexPath.row)!)

        cell.checkimage.image = myimage

    }
}

输出:

enter image description here

1 个答案:

答案 0 :(得分:0)

这是大多数应用中非常常见的用例。我假设你有一个所有类别的数组,然后是一个选定类别的数组。您需要做的是在cellForRowAtIndexPath中,检查“所有类别”数组中当前索引路径行的相应类别是否也出现在“所选类别”数组中。你可以通过比较id等来做到这一点。

如果您有匹配,那么您就知道需要选择/检查该单元格。一种干净的方法是为您的单元子类提供自定义加载方法,并且可以为selected / checked传递一个标志。

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

let cell = table.dequeueReusableCell(withIdentifier: "mycell") as! catcell

let category = self.categories[indexPath.row] // Let's say category is a string "hello"
Bool selected = self.selectedCategories.contains(category)

cell.load(category, selected)

return cell

}

因此,使用上面的代码,我们假设categories只是一个类别字符串数组,如helloworldstackoverflow。我们检查selectedCategories数组是否包含当前单元格/行的类别字。

假设我们设置的单元格属于helloselectedCategories确实包含它。这意味着selected bool设置为true。

然后我们将categoryselected值传递给单元子类'load方法,在该load方法中,您可以将单元格的标题文本设置为category,然后您可以检查如果selected为true或false,如果为true,则可以显示选中的复选框UI。