gpt4 book ai didi

ios - 使用 UISwitch 显示和隐藏 UITableViewCell 时崩溃太快

转载 作者:可可西里 更新时间:2023-11-01 03:50:02 25 4
gpt4 key购买 nike

我有一个 UITableView 可以向用户显示一些设置。除非 UISwitch 处于“打开”位置,否则某些单元格会隐藏。我有以下代码:

- (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];
}

这按预期工作,直到我快速连续切换 UISwitch 两次(通过双击),在这种情况下应用程序崩溃并显示

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.

我知道这是由于 numberOfRowsInSection 的返回值错误引起的,因为当单元格动画仍在播放时,开关又回到了原来的位置。我试过禁用切换并将代码挂接到其他事件处理程序下,但似乎没有什么可以防止崩溃。使用 reloadData 而不是动画也可以解决问题,但我更喜欢漂亮的动画。

有人知道正确的实现方法吗?

最佳答案

该问题的另一个(更优雅的)解决方案是:

我以这种方式修改了 Alan MacGregor - (IBAction)SwitchDidChange:(id)sender 方法:

- (IBAction)SwitchDidChange:(UISwitch *)source {
if (_showRows != source.on) {
NSArray *aryTemp = [[NSArray alloc] initWithObjects:
[NSIndexPath indexPathForRow:1 inSection:0],
[NSIndexPath indexPathForRow:2 inSection:0],
[NSIndexPath indexPathForRow:3 inSection:0],
[NSIndexPath indexPathForRow:4 inSection:0],nil];
[_tblView beginUpdates];
_showRows = source.on;
if (_showRows) {
[_tblView insertSections:aryTemp withRowAnimation:UITableViewRowAnimationFade];
}
else {
[_tblView deleteSections:aryTemp withRowAnimation:UITableViewRowAnimationFade];
}
[_tblView endUpdates];
}
}

其他部分不变。

关于ios - 使用 UISwitch 显示和隐藏 UITableViewCell 时崩溃太快,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9174142/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com