菜鸟教程小白 发表于 2022-12-12 14:37:52

ios - 滚动后tableview内的数据混淆了


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

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

<p>这是我的代码:</p>

<pre><code>- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *modifierCheckCell = @&#34;BGMModifierCheckCell&#34;;

    BGMModifierCheckCell *cell = nil;
    cell = (BGMModifierCheckCell *);

    if (cell == nil) {

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


      cell.selectionStyle = UITableViewCellSelectionStyleNone;

      NSArray *optionIds = [[ objectForKey:@&#34;optnItem&#34;] objectAtIndex:indexPath.row];

      BGMOptnCats *optnCat = objectForKey:@&#34;optnCatId&#34;]];

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

            __block int optnTag = ;

            BGMItemDayOptns *item = ;

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

                BGMOptnLangs *lang = (BGMOptnLangs *)obj;

                if () {

                  NSString *optn = ;

                  if () {

                        RadioButton *rb1                   = [ initWithFrame:CGRectMake(0, 0, 200, 40)];
                        ;
                        rb1.delegate                  = self;

                        if (idx == 0) {

                            ;

                        } else if (idx == 1) {

                            ;

                        } else if (idx == 2) {

                            ;

                        }


                  } else if () {

                        SSCheckBoxView *checkBox = [ initWithFrame:CGRectMake(0, 0, 200, 40) style:kSSCheckBoxViewStyleMono checked:NO];
                        checkBox.tag = optnTag;
                        ;
                        ;
                        ;

                        if (idx == 0) {

                            ;

                        } else if (idx == 1) {

                            ;

                        } else if (idx == 2) {

                            ;

                        }


                  }

                }

            }];

      }];

    }

    return cell;

}
</code></pre></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>问题是您的单元格正在被重复使用。所以滚动时行会互换。</p>

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

<pre>- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    静态 NSString *modifierCheckCell = @"BGMModifierCheckCell";

    BGMModifierCheckCell *cell = nil;
    cell = (BGMModifierCheckCell *);

    如果(细胞 == 零){

      NSArray* topLevelObjects = [ loadNibNamed:modifierCheckCell owner:self options:nil];
      for (id currentObject in topLevelObjects) {
            if (]) {
                单元格 = (BGMModifierCheckCell *)currentObject;
                休息;
            }
      }
   }


      cell.selectionStyle = UITableViewCellSelectionStyleNone;

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

      BGMOptnCats *optnCat = objectForKey:@"optnCatId"]];

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

            __block int optnTag = ;

            BGMItemDayOptns *item = ;

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

                BGMOptnLangs *lang = (BGMOptnLangs *)obj;

                if () {

                  NSString *optn = ;

                  if () {

                        RadioButton *rb1 = [ initWithFrame:CGRectMake(0, 0, 200, 40)];
                        ;
                        rb1.delegate =self ;

                        如果(idx == 0){

                            ;

                        } else if (idx == 1) {

                            ;

                        } else if (idx == 2) {

                            ;

                        }


                  } else if () {

                        SSCheckBoxView *checkBox = [ initWithFrame:CGRectMake(0, 0, 200, 40) 样式:kSSCheckBoxViewStyleMono 选中:NO];
                        checkBox.tag = optnTag;
                        ;
                        [复选框 setText:@""];
                        [复选框 setText:optn];

                        如果(idx == 0){

                            ;

                        } else if (idx == 1) {

                            ;

                        } else if (idx == 2) {

                            ;

                        }


                  }

                }

            }];

      }];

    返回单元格;

}</pre></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 滚动后tableview内的数据混淆了,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/18777530/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/18777530/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 滚动后tableview内的数据混淆了