Tôi có một UITableView trình bày một số cài đặt cho người dùng. Một số ô bị ẩn trừ khi UISwitch ở vị trí 'Bật'. Tôi đã có đoạn mã sau:Hiển thị và ẩn UITableViewCell với UISwitch treo nhanh quá
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return switchPush.on ? 6 : 1;
}
// Hooked to the 'Value Changed' action of the switchPush
- (IBAction)togglePush:(id)sender {
NSMutableArray *indexPaths = [NSMutableArray arrayWithCapacity:0];
for(int i = 1; i <= 5; i++) {
[indexPaths addObject:[NSIndexPath indexPathForRow:i inSection:0]];
}
[tableView beginUpdates];
if(switchPush.on) {
[tableView insertRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationAutomatic];
} else {
[tableView deleteRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationAutomatic];
}
[tableView endUpdates];
}
này hoạt động như mong đợi, cho đến khi tôi chuyển UISwitch hai lần liên tiếp nhanh (bằng cách gõ kép), trong trường hợp tai nạn ứng dụng với một
Invalid table view update. The application has requested an update to the table view that is inconsistent with the state provided by the data source.
mà Tôi biết rằng nó được gây ra bởi giá trị trả về sai của numberOfRowsInSection khi chuyển đổi trở lại vị trí ban đầu của nó trong khi hoạt ảnh của ô vẫn đang phát. Tôi đã thử vô hiệu hóa các chuyển đổi và hooking mã dưới xử lý sự kiện khác nhưng không có gì có vẻ để ngăn chặn sự cố. Sử dụng reloadData thay vì hoạt ảnh cũng giải quyết được vấn đề nhưng tôi thích hình động đẹp hơn.
Có ai biết cách thực hiện chính xác điều này không?
UIToggle là gì? Bạn có nghĩa là một 'UISwitch'? – Mundi
Có, tôi đã sửa lại câu hỏi. –