单元格出列后,单元属性是否重置?

时间:2013-04-14 16:41:45

标签: objective-c cocoa-touch

我已经制作了一个带有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)。

虽然开关本身的视觉状态仍然正确,但单元属性却没有。

我认为该物业在出列后并不存在?

1 个答案:

答案 0 :(得分:2)

持久化值应该是支持模型对象的工作,而不是单元本身。可以通过表视图多次重复使用相同的单元对象,并且始终希望在后备对象的tableView:cellForRowAtIndexPath:中设置其正确的状态。这样,重复使用的单元格之前可能已将boolValue设置为YESNO,但您始终将cell.boolSwitch.on设置为modelObject.someBoolProperty并最终处于正确状态状态。

您的switched:方法是更新支持对象状态的地方:

- (void)switched:(UISwitch*)boolSwitch {
    self.modelObject.someBoolProperty = boolSwitch.on;
}