调整另一行后,UITableViewCells在拖动时随机消失

时间:2014-05-24 01:16:07

标签: ios uitableview

我有一个UITableView。我使用此代码调整所选行的大小:

-(void) viewWillAppear:(BOOL)animated {
    ....
    [self.tableView registerNib:[UINib nibWithNibName:@"ICSceneDetailViewTableViewCell" bundle:[NSBundle mainBundle]] forCellReuseIdentifier:IC_CELL_SCENE_EDITOR_CELL];
    ...
}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return 1;
}

-(int) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    if (tableView == nil)
        return 0;

    if (self.scenes != nil) {
        return self.scenes.count;
    }
    return 0;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    ICSceneDetailViewTableViewCell *cell = (ICSceneDetailViewTableViewCell*)[tableView dequeueReusableCellWithIdentifier:IC_CELL_SCENE_EDITOR_CELL forIndexPath:indexPath];
    if (cell == nil) {
    cell = [[ICSceneDetailViewTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:IC_CELL_SCENE_EDITOR_CELL];
    }
    ICScene *scene = [self.scenes objectAtIndex:[indexPath row]];
    [cell.titleTextField setText:scene.title];

    return cell;
}

-(void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    self.selectedRow = indexPath.row;
    [self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath, nil]     withRowAnimation:UITableViewRowAnimationNone];
    [self.tableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionTop animated:NO];
}

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {

    if ([indexPath row] == self.selectedRow) {
        return 250;
    }

    if (IS_IPAD) {
         return 80;
    }
    else {
         return 40;
    }
}

-(UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath {
    return UITableViewCellEditingStyleNone;
}

但是,在选择任何行(将其命名为A,A调整大小)后:

  • 如果我拖动另一行(将其命名为B),则其他行随机消失(A除外)。
  • 如果我滚动tableview并返回拖动同一行(B)然后再次随机地,其他(s)单元格消失,但并不总是相同。

如果我评论 heightForRowAtIndexPath ,那么拖动行为是正常的,但行不能调整大小:(

我已经搜索了许多类似的答案(在单元格上调整selectedBackgroundView,在单元格上调整backgroundView单元格,在单元格上调整drawRect等),但没有一个解决方案/解决方法适用于这个简单的(我认为)代码。

提前致谢:)

1 个答案:

答案 0 :(得分:0)

是的,回答我自己的问题。

我发现了一种替代方法,可以在不调用 reloadRowsAtIndexPaths 的情况下调整所选UITableViewCell的大小。

reloadRowsAtIndexPaths 替换为:

[self.tableView beginUpdates];
[self.tableView endUpdates];

刷新可见行而不调用 cellForRowAtIndexPath 。 Imho是重新加载每一行上的单元格的问题。

结果代码是:

-(void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    self.selectedRow = indexPath.row;
    [self.tableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionTop animated:NO];
    [self.tableView beginUpdates];
    [self.tableView endUpdates];
}

所以,自动地,没有任何消失的行:)