UITableView 中显示错误的编辑控件

发布于 2024-09-03 02:32:04 字数 337 浏览 4 评论 0原文

我在使用 UITableView 时遇到了一个奇怪的问题。当用户点击“编辑”按钮时,表格视图(具有多个部分的分组视图)应该显示每行的删除按钮 - 除了每个部分的最后一行,它有一个绿色的添加按钮。

当用户点击绿色按钮时,会插入一个新行,但现在最后一行有一个删除按钮。更奇怪的是,删除按钮的作用就像添加按钮。因此,似乎存在绘图故障,而不是分配正确样式的问题。 (广泛的 NSLogging 显示最后一个单元格正确获取了插入编辑样式。)

我尝试在单元格和 tableView 上设置 setNeedsDisplay,我尝试重新加载该部分/行/整个表格,但问题仍然存在。关于如何让 UITableView 显式重绘编辑控件有什么想法吗?

I'm having a strange problem with UITableView. When the user taps the Edit button, the tableview (which is a grouped view with multiple sections) is supposed to show delete buttons for each row--except for the final row in each section, which has a green add button.

When a user taps the green button, a new row is inserted, but now the final row gets a delete button. Even stranger, that delete button ACTS like an add button. So it seems there's a drawing glitch, rather than a problem in assigning the correct style. (Extensive NSLogging shows that the last cell is getting the Insert editing style correctly.)

I've tried setting setNeedsDisplay on the cell and the tableView, I've tried reloading that section/row/the entire table, but the issue persists. Any ideas on how to get UITableView to explicitly redraw the editing controls?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

纸短情长 2024-09-10 02:32:04

我也有同样的问题。似乎单元格被重复使用了太多。

您可以通过使用不同的标识符为插入的单元格强制使用新单元格来修复它:

if([tableView isEditing] && indexPath.row == [items count]){
    static NSString *CellIdentifier = @"AddCell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    // "add-cell" setup here.. e.g"
    [[cell textLabel] setText:@"Tab to add new item"];

    return cell;
}else{
    static NSString *CellIdentifier = @"NormalCell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    // normal cell setup here..

    return cell;
}

I had the same problem. It seems like the cell's gets reused too much..

You could fix it by enforcing new cells for the inserted cells by using different identifiers:

if([tableView isEditing] && indexPath.row == [items count]){
    static NSString *CellIdentifier = @"AddCell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    // "add-cell" setup here.. e.g"
    [[cell textLabel] setText:@"Tab to add new item"];

    return cell;
}else{
    static NSString *CellIdentifier = @"NormalCell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    // normal cell setup here..

    return cell;
}
青春有你 2024-09-10 02:32:04

我很确定您可以在 UITableView 委托中实现此操作,以防止它编辑最后一行:


-(BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
  // Return NO if you do not want the specified item to be editable.
  if (indexPath.row != lastRow) // whatever your last row is
    return YES;
  }
  return NO;
}

I'm pretty sure you can just implement this in your UITableView delegate to prevent it from editing the last row:


-(BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
  // Return NO if you do not want the specified item to be editable.
  if (indexPath.row != lastRow) // whatever your last row is
    return YES;
  }
  return NO;
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文