我在一些自定义UITableViewCell中有一个UISwitch,当我在它们上面调用setOn:animated:
时,它们无法直观更新。
on
值。reloadData
将突然更新交换机(不是我想要的)-reloadRowsAtIndexPaths:withRowAnimation
还使用从旧到新的交叉渐变(自动行动画)更新视图setNeedsLayout
和setNeedsDisplay
似乎对交换机或超级视图没有任何影响我想要做的是致电[theSwitch setOn:onValue animated:YES];
并让开关动画显示正确的开/关位置。
有什么想法吗?
编辑:添加代码段...
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSString *cellIdentifier = @"SwitchedCell";
UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if(!cell) {
cell = [[SettingsSwitchedTableCell alloc] init];
}
if([cell class] == [SettingsSwitchedTableCell class]){
[[(SettingsSwitchedTableCell *)cell theSwitch] setOn: [[self.feedbackDS valueForRow:indexPath.row] boolValue]];
[[(SettingsSwitchedTableCell *)cell theSwitch] addTarget:self action:@selector(switchChanged:) forControlEvents:UIControlEventValueChanged];
}
}
重置方法(应该使用动画设置开关,但需要重新加载表格)
-(void)resetSettings {
NSInteger rows = [self tableView:self.tableView numberOfRowsInSection:0];
for(NSInteger ii=0; ii<rows; ii++){
UITableViewCell *cell = [self tableView:self.tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:ii inSection:0]];
if( [cell class] == [SettingsSwitchedTableCell class]){
[[(SettingsSwitchedTableCell *)cell theSwitch] setOn:YES animated:YES];
[self.tableView reloadRowsAtIndexPaths:@[ [NSIndexPath indexPathForRow:ii inSection:0]] withRowAnimation:UITableViewRowAnimationAutomatic];
}
}
}