我已经制作了一个带有UISwitch的自定义单元格。
自定义单元格类具有以下属性:
@property (nonatomic, assign) BOOL boolValue;
细胞初始化的重要部分是:
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
UISwitch *boolSwitch = [[UISwitch alloc] init];
boolSwitch.on = self.boolValue;
//self.boolValue = boolSwithch.on /** tried as well **/
[boolSwitch addTarget:self action:@selector(switched:) forControlEvents:UIControlEventValueChanged];
self.accessoryView = boolSwitch;
}
return self;
和切换:方法:
- (void)switched:(id)boolSwitch {
self.boolValue = ((UISwitch *)boolSwitch).on;
}
现在这一切都很好用,我可以从tableview委托中获取boolValue
没有问题,除非我说摇摆开关后出现模态视图。当我返回tableView时,cell.boolValue
将再次设置为默认值(NO)。
虽然开关本身的视觉状态仍然正确,但单元属性却没有。
我认为该物业在出列后并不存在?
答案 0 :(得分:2)
持久化值应该是支持模型对象的工作,而不是单元本身。可以通过表视图多次重复使用相同的单元对象,并且始终希望在后备对象的tableView:cellForRowAtIndexPath:
中设置其正确的状态。这样,重复使用的单元格之前可能已将boolValue
设置为YES
或NO
,但您始终将cell.boolSwitch.on
设置为modelObject.someBoolProperty
并最终处于正确状态状态。
您的switched:
方法是更新支持对象状态的地方:
- (void)switched:(UISwitch*)boolSwitch {
self.modelObject.someBoolProperty = boolSwitch.on;
}