0
我有一個UITableView充滿了UITableViewCell,它包含一個複選標記。reloadRowsAtIndexPaths副作用?
當我點擊一個單元格,如果它被標記變得無人盯防,反之亦然。
到目前爲止好。現在我想每次點擊任何其他單元格時更新第一個單元格(假定第一個單元格是奇特的)。我修改了代碼didSelectRowAtIndexPath方法(見下文),它能夠正常工作,只是我上電池以下不希望的行爲,我點擊:
正如你所看到的頂部的白線細胞已經消失......
這裏是我的代碼看起來像的(我猜的)關鍵功能:
- (UITableViewCell *)tableView:(UITableView *)aTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:@"cell" forIndexPath:indexPath];
cell.selectionStyle = UITableViewCellSelectionStyleNone;
cell.backgroundColor = [UIColor darkGrayColor];
cell.textLabel.textColor = [UIColor whiteColor];
cell.textLabel.text = [myLabels objectAtIndex:indexPath.row];
bool isChecked = false;
if ([currentValues[indexPath.row] boolValue]) {
isChecked = true;
}
cell.accessoryType = isChecked ? UITableViewCellAccessoryCheckmark : UITableViewCellAccessoryNone;
return cell;
}
- (void)tableView:(UITableView *)aTableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath];
bool isChecked = false;
if ([currentValues[indexPath.row] boolValue]) {
isChecked = false;
currentValues[indexPath.row] = [NSInteger numberWithBool:false];
// below is the part of code that causes trouble
[self.tableView beginUpdates];
NSIndexPath* indexPath = [NSIndexPath indexPathForRow:0 inSection:0];
[self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationNone];
[self.tableView endUpdates];
// end of problematic code
}
else {
isChecked = true;
currentValues[indexPath.row] = [NSInteger numberWithBool:true];
// similarly...
[self.tableView beginUpdates];
NSIndexPath* indexPath = [NSIndexPath indexPathForRow:0 inSection:0];
[self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationNone];
[self.tableView endUpdates];
}
cell.accessoryType = isChecked ? UITableViewCellAccessoryCheckmark :UITableViewCellAccessoryNone;
}
NB如果我重新加載整個TA可是,我沒有這個問題。但我覺得這對我瞭解那裏發生的事情可能是值得的。
NB2我嘗試過和沒有[self.tableView beginUpdates]和[self.tableView endUpdates]的調用,但它似乎沒有什麼區別。
意想不到的回答,非常感謝你!任何想法當你不取消選擇細胞時會發生什麼?爲什麼這會導致白線消失? – vib
你可以說,這是蘋果的bug,我沒有太多想法,但是無論何時選擇一行/單元格,並且如果執行重新加載單元格,它都會刪除分隔符,直到重新加載完整的tableview,這不是合適的解決方案每次。 –