tableview 上的 setediting = true 使单元格附件视图消失?

Posted

技术标签:

【中文标题】tableview 上的 setediting = true 使单元格附件视图消失?【英文标题】:setediting = true on tableview makes cell accessoryview disappear? 【发布时间】:2012-06-27 14:20:49 【问题描述】:

我在每个 tableview 单元格上都有一个 UISwitchView,并希望允许对单元格进行重新排序。问题是当我在表格视图上设置 setEditing=true 时,附件(switchview)消失了。有没有办法同时保留两者?

编辑

static NSString *CellIdentifier = @"Edit Sources Cell";
UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) 
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 
 

// Configure the cell...
NSUInteger row = [indexPath row];
Source *source = [self.sources objectAtIndex:row];

cell.textLabel.text = source.name;

UISwitch *switchView = [[UISwitch alloc] initWithFrame:CGRectZero];
switchView.tag = row;
cell.accessoryView = switchView;
[switchView setOn:source.switchedOn animated:NO];
[switchView addTarget:self action:@selector(switchChangedForSource:)  forControlEvents: UIControlEventValueChanged] ;

【问题讨论】:

【参考方案1】:

UITableViewCell 有一个附加属性editingAccessoryView,用于在单元格处于编辑模式时显示的视图。

我不知道您是否可以将相同的 UISwitch 实例分配给 accessoryVieweditingAccessoryView 属性,或者您是否需要创建两个实例。 (一个视图一次只能有一个父级,但 UITableViewCell 实际上是在做显示视图的工作,所以它可能足够聪明来处理这种情况。)

【讨论】:

【参考方案2】:

是的,有办法保留它们。

您应该制作自定义单元格视图您可以将每个 UI 元素添加到此自定义单元格,包括切换视图(或其他任何内容)和 您当您将表格的编辑设置为 true 时不会有问题,因为在自定义单元格视图中,UI 元素不会消失。

标准表格单元格的 UI 元素不是由您控制的,这就是为什么您只能同时看到其中一个内置附件的原因。当您使用自定义单元格视图时,它永远不会发生。

我希望您熟悉自定义单元格视图,但如果您不熟悉,我也可以提供准确的代码,但想法是这样的。

【讨论】:

我相信我目前正在使用自定义单元格视图(来自情节提要)。我已将 switchview 添加为自定义单元格的附件类型,请参阅我的问题的编辑 好的,我所做的一切正常: 1. 将Style 设置为Custom; 2.在自定义单元格中添加了切换视图; 3.将Accessory和'Editing Acc.'都设置为None;和 4. 在[self.tableview setEditing:true] 之后切换视图没有消失...很难说你为什么错了,因为我没有在界面生成器中看到 UI 设置。 根本不要设置cell.accessoryView。在cell.contentView 中添加您自己的子视图。【参考方案3】:

如果您的意思是它正在消失 在重新排序控件下,您可以通过调整 autoresizingMask 属性(如果您在代码中添加开关)或通过如果您在 IB 中构建了 Autosizing,则以图形方式调整它。

【讨论】:

我试过移动它的框架,设置自动调整大小的掩码,但它根本没有出现。似乎设置编辑 size = true 正在将附件视图设置为无?【参考方案4】:

我认为您需要子类化您的 tableview 单元格。如果 self.isEditing 对于您的 UITableViewCell 子类为 YES,则以编程方式将 UISwitch 移动到左侧。

【讨论】:

以上是关于tableview 上的 setediting = true 使单元格附件视图消失?的主要内容,如果未能解决你的问题,请参考以下文章

TableView 不会向单元格发送 setEditing 消息

self.editing 与 self.tableView.editing 和 setEditing 的混淆

如何避免在 UITableViewCell 上滑动删除调用 setEditing

从 setEditing 更改核心数据谓词

UITableView编辑模式

JavaFx表格视图TableView设置单元格可编辑