1

我制作了一个带有 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;

和 switch: 方法:

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

现在这一切都很好,我可以boolValue从 tableview 代表中获取没有问题,除非我说在摇动开关后呈现模态视图。当我返回 tableView 时,cell.boolValue将再次设置为其默认值 (NO)。

尽管开关本身的视觉状态保持正确,但单元格属性却没有。

我认为出队后该属性不会持续存在?

4

1 回答 1

2

持久化一个值应该是支持模型对象的工作,而不是单元格本身。同一个单元格对象可以被表格视图多次重用,并且您总是希望tableView:cellForRowAtIndexPath:从支持对象中设置其正确的状态。这样,重用的单元格可能已经boolValue设置为YESNO以前设置,但您将始终设置cell.boolSwitch.onmodelObject.someBoolProperty并最终处于正确的状态。

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

- (void)switched:(UISwitch*)boolSwitch {
    self.modelObject.someBoolProperty = boolSwitch.on;
}
于 2013-04-14T16:52:12.103 回答