要温柔,我正在学习。
下面的代码实际上工作得很好,除了我第一次点击一行(适当地放置一个复选标记)后,我必须点击一个单元格两次才能删除相同的复选标记。
同样,在删除它之后,需要两次点击才能将复选标记放回原位。
我该如何解决这个问题?
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *thisCell = [tableView cellForRowAtIndexPath:indexPath];
NSInteger selectedRow = indexPath.row;
if (thisCell.accessoryType == UITableViewCellAccessoryNone) {
thisCell.accessoryType = UITableViewCellAccessoryCheckmark;
if (selectedRow == 0) dm = 1;
else if (selectedRow == 1) athero1 = 1;
else if (selectedRow == 2) athero2 = 1;
else if (selectedRow == 3) athero3 = 1;
else if (selectedRow == 4) familyHistory1 = 1;
else if (selectedRow == 5) familyHistory2 = 1;
}
else {
thisCell.accessoryType = UITableViewCellAccessoryNone;
if (selectedRow == 0) dm = 0;
else if (selectedRow == 1) athero1 = 0;
else if (selectedRow == 2) athero2 = 0;
else if (selectedRow == 3) athero3 = 0;
else if (selectedRow == 4) familyHistory1 = 0;
else if (selectedRow == 5) familyHistory2 = 0;
}
}
答案 0 :(得分:2)
确保allowsMultipleSelection
未设置为YES
。未使用此属性时设置的默认值为NO
。如果您在班级的任何地方使用此属性,请尝试将其设置为NO
以检查其是否有效。这将导致需要2个水龙头来选择一行。
self.tableView.allowsMultipleSelection = NO;
答案 1 :(得分:1)
有一个数组来存储选定的行索引。在 -didSelect 中,检查数组中是否已存在行索引,如果没有添加,则将其从数组中删除。并重新加载表。就这样。我相信这会奏效。 :]
答案 2 :(得分:0)
您是否有可能将两个UITableViewControl推送到导航控制器堆栈?
我遇到了这种情况,问题是在switch语句中缺少'break'导致第二个TableViewController被推送。视图上的所有内容都需要两次点击,甚至是我的“后退”按钮。