我从服务器获取以前选择的类别列表。比如说,我从服务器获取的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
}
}
输出:
答案 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
只是一个类别字符串数组,如hello
,world
和stackoverflow
。我们检查selectedCategories
数组是否包含当前单元格/行的类别字。
假设我们设置的单元格属于hello
,selectedCategories
确实包含它。这意味着selected
bool设置为true。
然后我们将category
和selected
值传递给单元子类'load方法,在该load方法中,您可以将单元格的标题文本设置为category
,然后您可以检查如果selected
为true或false,如果为true,则可以显示选中的复选框UI。