我有一个UITableView
,我想在选定的单元格或单元格中添加cell.textLabel.text
的单元格中添加复选标记。如果数组计数为0,则第一个单元格应该有一个复选标记(有效,但随机选择其他单元格),否则为包含textlabel.text
数组的单元格添加复选标记,也可以选择滚动随机单元格。 (我已经为我的UITableView添加了多个选择)。我该如何解决这个问题?
的cellForRowAtIndexPath
func tableView(tableView: UITableView,
cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell{
let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath)
cell.textLabel!.text = settings_categories[indexPath.row]
if (userData[0].settings_categories.count == 0 && indexPath.row == 0){
cell.accessoryType = UITableViewCellAccessoryType.Checkmark
}
else{
if (userData[0].settings_categories.contains(settings_categories[indexPath.row])){
cell.accessoryType = UITableViewCellAccessoryType.Checkmark
}
}
if (cell.selected){
cell.selected = false
if (cell.accessoryType == UITableViewCellAccessoryType.None){
cell.accessoryType = UITableViewCellAccessoryType.Checkmark
}
else
{
cell.accessoryType = UITableViewCellAccessoryType.None
}
}
return cell;
}
didSelectRowAtIndexPath方法
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
NSLog("You selected cell number: \(indexPath.row)!")
let cell = tableView.cellForRowAtIndexPath(indexPath)
if cell!.selected
{
cell!.selected = false
if cell!.accessoryType == UITableViewCellAccessoryType.None
{
//Add to array
userData[0].settings_categories.append((cell?.textLabel?.text)!)
cell!.accessoryType = UITableViewCellAccessoryType.Checkmark
print(userData[0].settings_categories)
}
else
{
var counter = 0;
for index in userData[0].settings_categories {
if index == cell?.textLabel?.text {
userData[0].settings_categories.removeAtIndex(counter)
print(userData[0].settings_categories)
}
counter++
}
cell!.accessoryType = UITableViewCellAccessoryType.None
}
}
}
答案 0 :(得分:3)
在单元初始化之后再添加一个cell.accessoryType = UITableViewCellAccessoryType.None
因为在tableview中它重用了私有单元,所以如果单元格已经检查过(因为它重用了已检查的单元格),那么默认情况下它会被检查,所以在更新后你的代码将会是
func tableView(tableView: UITableView,
cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell{
let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath)
cell.textLabel!.text = settings_categories[indexPath.row]
cell.accessoryType = UITableViewCellAccessoryType.None// new added line
if (userData[0].settings_categories.count == 0 && indexPath.row == 0){
cell.accessoryType = UITableViewCellAccessoryType.Checkmark
// cell.selected = true
}
else{
if (userData[0].settings_categories.contains(settings_categories[indexPath.row])){
cell.accessoryType = UITableViewCellAccessoryType.Checkmark
// cell.selected = true
}
}
if (cell.selected){
cell.selected = false
if (cell.accessoryType == UITableViewCellAccessoryType.None){
cell.accessoryType = UITableViewCellAccessoryType.Checkmark
}
else
{
cell.accessoryType = UITableViewCellAccessoryType.None
}
}
return cell;
}
答案 1 :(得分:1)
您无法将选定状态存储在单元格内部,因为它们可以重复使用。您必须维护单独的数组或索引集以维护选定的索引。
答案 2 :(得分:0)
也发生在我身上。然后,我维护了一个数组来保存选定的indexPath.row&使用该数组重新加载表数据,例如保存在该数组中的行,每次滚动后都会有Checkmark附件。这只是一个解决方案,而不是最好的解决方案。
答案 3 :(得分:0)
在单元类实现中设置附件
- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
[super setSelected:selected animated:animated];
// Configure the view for the selected state
self.accessoryType = selected ? UITableViewCellAccessoryCheckmark : UITableViewCellAccessoryNone;
}