gpt4 book ai didi

ios - 滚动后 tableview 中的数据混淆

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:40:32 25 4
gpt4 key购买 nike

我已经阅读了很多问题并尝试了解决方案,但我仍然无法用我的 tableview 解决问题。

滚动后,tableview 的行中的数据会互换,有时会丢失。

这是我的代码:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *modifierCheckCell = @"BGMModifierCheckCell";

BGMModifierCheckCell *cell = nil;
cell = (BGMModifierCheckCell *)[tableView dequeueReusableCellWithIdentifier:modifierCheckCell];

if (cell == nil) {

NSArray* topLevelObjects = [[NSBundle mainBundle] loadNibNamed:modifierCheckCell owner:self options:nil];
for (id currentObject in topLevelObjects) {
if ([currentObject isKindOfClass:[UITableViewCell class]]) {
cell = (BGMModifierCheckCell *)currentObject;
break;
}
}


cell.selectionStyle = UITableViewCellSelectionStyleNone;

NSArray *optionIds = [[[arrayInsideDict objectAtIndex:indexPath.section] objectForKey:@"optnItem"] objectAtIndex:indexPath.row];

BGMOptnCats *optnCat = [BGMOptnCats MR_findFirstByAttribute:@"iOptnCatId" withValue:[[arrayInsideDict objectAtIndex:indexPath.section] objectForKey:@"optnCatId"]];

[optionIds enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {

__block int optnTag = [obj intValue];

BGMItemDayOptns *item = [BGMItemDayOptns MR_findFirstByAttribute:@"iItemDayOptnId" withValue:obj];

[item.optns.optnLangs enumerateObjectsUsingBlock:^(id obj, BOOL *stop) {

BGMOptnLangs *lang = (BGMOptnLangs *)obj;

if ([lang.sLangCode isEqualToString:@"en"]) {

NSString *optn = [NSString stringWithFormat:@"%@", lang.sOptnName];

if ([optnCat.sOptnType isEqualToString:@"single"]) {

RadioButton *rb1 = [[RadioButton alloc] initWithFrame:CGRectMake(0, 0, 200, 40)];
[rb1 setGroupID:indexPath.section AndID:optnTag AndTitle:optn];
rb1.delegate = self;

if (idx == 0) {

[cell.firstOption addSubview:rb1];

} else if (idx == 1) {

[cell.secondOption addSubview:rb1];

} else if (idx == 2) {

[cell.thirdOption addSubview:rb1];

}


} else if ([optnCat.sOptnType isEqualToString:@"multiple"]) {

SSCheckBoxView *checkBox = [[SSCheckBoxView alloc] initWithFrame:CGRectMake(0, 0, 200, 40) style:kSSCheckBoxViewStyleMono checked:NO];
checkBox.tag = optnTag;
[checkBox setStateChangedTarget:self selector:@selector(checkBoxViewChangedState:)];
[checkBox setText:@""];
[checkBox setText:optn];

if (idx == 0) {

[cell.firstOption addSubview:checkBox];

} else if (idx == 1) {

[cell.secondOption addSubview:checkBox];

} else if (idx == 2) {

[cell.thirdOption addSubview:checkBox];

}


}

}

}];

}];

}

return cell;

}

最佳答案

问题是您的细胞正在被重复使用。所以滚动时行会互换。

在 if (cell == nil) 之外设置单元格内容。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{    static NSString *modifierCheckCell = @"BGMModifierCheckCell";    BGMModifierCheckCell *cell = nil;    cell = (BGMModifierCheckCell *)[tableView dequeueReusableCellWithIdentifier:modifierCheckCell];    if (cell == nil) {        NSArray* topLevelObjects = [[NSBundle mainBundle] loadNibNamed:modifierCheckCell owner:self options:nil];        for (id currentObject in topLevelObjects) {            if ([currentObject isKindOfClass:[UITableViewCell class]]) {                cell = (BGMModifierCheckCell *)currentObject;                break;            }        }     }        cell.selectionStyle = UITableViewCellSelectionStyleNone;        NSArray *optionIds = [[[arrayInsideDict objectAtIndex:indexPath.section] objectForKey:@"optnItem"] objectAtIndex:indexPath.row];        BGMOptnCats *optnCat = [BGMOptnCats MR_findFirstByAttribute:@"iOptnCatId" withValue:[[arrayInsideDict objectAtIndex:indexPath.section] objectForKey:@"optnCatId"]];        [optionIds enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {            __block int optnTag = [obj intValue];            BGMItemDayOptns *item = [BGMItemDayOptns MR_findFirstByAttribute:@"iItemDayOptnId" withValue:obj];            [item.optns.optnLangs enumerateObjectsUsingBlock:^(id obj, BOOL *stop) {                BGMOptnLangs *lang = (BGMOptnLangs *)obj;                if ([lang.sLangCode isEqualToString:@"en"]) {                    NSString *optn = [NSString stringWithFormat:@"%@", lang.sOptnName];                    if ([optnCat.sOptnType isEqualToString:@"single"]) {                        RadioButton *rb1                   = [[RadioButton alloc] initWithFrame:CGRectMake(0, 0, 200, 40)];                        [rb1 setGroupID:indexPath.section AndID:optnTag AndTitle:optn];                        rb1.delegate                    = self;                        if (idx == 0) {                            [cell.firstOption addSubview:rb1];                        } else if (idx == 1) {                            [cell.secondOption addSubview:rb1];                        } else if (idx == 2) {                            [cell.thirdOption addSubview:rb1];                        }                    } else if ([optnCat.sOptnType isEqualToString:@"multiple"]) {                        SSCheckBoxView *checkBox = [[SSCheckBoxView alloc] initWithFrame:CGRectMake(0, 0, 200, 40) style:kSSCheckBoxViewStyleMono checked:NO];                        checkBox.tag = optnTag;                        [checkBox setStateChangedTarget:self selector:@selector(checkBoxViewChangedState:)];                        [checkBox setText:@""];                        [checkBox setText:optn];                        if (idx == 0) {                            [cell.firstOption addSubview:checkBox];                        } else if (idx == 1) {                            [cell.secondOption addSubview:checkBox];                        } else if (idx == 2) {                            [cell.thirdOption addSubview:checkBox];                        }                    }                }            }];        }];    return cell;}

关于ios - 滚动后 tableview 中的数据混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18777530/

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