gpt4 book ai didi

ios - 自定义 UITableViewCell、UITableView 和 allowsMultipleSelectionDuringEditing

转载 作者:可可西里 更新时间:2023-11-01 05:38:28 26 4
gpt4 key购买 nike

我在使用 iOS 5 新功能在编辑模式下选择多个单元格时遇到问题。应用结构如下:

-> UIViewController
---> UITableView
----> CustomUITableViewCell

UIViewControllerUITableView 的委托(delegate)和数据源(我使用的是 UIViewController 而不是 UITableViewController 出于需求原因,我无法更改它)。像下面的代码一样将单元格加载到 UITableView 中。

- (UITableViewCell *)tableView:(UITableView *)tv cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
CustomTableViewCell *cell = (CustomTableViewCell*)[tv dequeueReusableCellWithIdentifier:kCellTableIdentifier];
if (cell == nil)
{
[[NSBundle mainBundle] loadNibNamed:@"CustomTableViewCellXib" owner:self options:nil];
cell = self.customTableViewCellOutlet;
cell.selectionStyle = UITableViewCellSelectionStyleNone;
}

// configure the cell with data
[self configureCell:cell atIndexPath:indexPath];

return cell;
}

单元接口(interface)是从 xib 文件创建的。特别是,我创建了一个新的 xib 文件,其中 super View 由一个 UITableViewCell 元素组成。为了提供自定义,我将该元素的类型设置为 CustomUITableViewCell,其中 CustomUITableViewCell 扩展 UITableViewCell

@interface CustomTableViewCell : UITableViewCell

// do stuff here

@end

代码运行良好。在表中显示自定义单元格。现在,在应用程序执行期间,我将 allowsMultipleSelectionDuringEditing 设置为 YES 并进入 UITableView 的编辑模式。它似乎工作。事实上,每个单元格旁边都会出现一个空圆圈。问题是当我选择一行时,空圆不会改变它的状态。理论上,圆圈必须从空变为红色复选标记,反之亦然。似乎圆圈仍位于单元格的 contentView 上方。

我做了很多实验。我还检查了以下方法。

- (NSArray *)indexPathsForSelectedRows

它会在编辑模式下的选择过程中更新。它显示正确选择的单元格。

我不太清楚的是,当我尝试在没有自定义单元格的情况下工作时,仅使用 UITableViewCell,圆圈会正确更新其状态。

你有什么建议吗?提前谢谢你。

最佳答案

对于那些感兴趣的人,我找到了一个有效的解决方案来解决前面的问题。The problem is that when selection style is UITableViewCellSelectionStyleNone red checkmarks in editing mode aren't displayed correctly.解决方案是创建一个自定义 UITableViewCell 并覆盖一些方法。我正在使用 awakeFromNib 因为我的单元格是通过 xib 创建的。为了找到解决方案,我遵循了这两个 stackoverflow 主题:

  1. multi-select-table-view-cell-and-no-selection-style
  2. uitableviewcell-how-to-prevent-blue-selection-background-w-o-borking-isselected

这里是代码:

- (void)awakeFromNib
{
[super awakeFromNib];

self.backgroundView = [[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"row_normal"]] autorelease];
self.selectedBackgroundView = [[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"row_selected"]] autorelease];
}

- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
if(selected && !self.isEditing)
{

return;
}

[super setSelected:selected animated:animated];
}

- (void)setHighlighted: (BOOL)highlighted animated: (BOOL)animated
{
// don't highlight
}

- (void)setEditing:(BOOL)editing animated:(BOOL)animated
{
[super setEditing:editing animated:animated];

}

希望对您有所帮助。

关于ios - 自定义 UITableViewCell、UITableView 和 allowsMultipleSelectionDuringEditing,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9101810/

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