一张图抵得上一千个字……
对于更多背景知识,我有一个利用 iOS 5 的 UITableViewallowsMultipleSelectionDuringEditing
设置为YES
. 这会导致在单元格处于编辑模式时,单元格左侧会显示空的和填充的编辑控件。这种行为正是我想要的。我只想更改这些复选标记的外观。
我知道可以编写自定义选择逻辑并基本上推出我自己的版本(如this和this),但这是我想要避免的。该系统已经到位,我想尽可能多地重复使用它。
这是我最近的一次。它简单且有效,同时重用几乎所有预烘焙系统。然而,这也是一个巨大的 hack,并且依赖于UITableViewCell
在一点运行时内省之后利用未记录的视图层次结构。
简而言之,这只是隐藏了通常负责显示复选标记的视图,允许我添加可以在其位置显示的自己的视图。然后,当单元格的选择或编辑状态发生变化时,我可以操纵这个替代视图......
为了防止出现标准复选标记,只需要自定义-layoutSubviews
实现即可。根据文档,在-willTransitionToState:
and之后调用它,确保状态在or更改-setEditing:animated:
时始终有效。isSelected
isEditing
- (void)layoutSubviews
{
[super layoutSubviews];
// Find the offending view, and quietly bury it...
for (UIView* subview in [self subviews])
{
// As determined by NSLogging every subview's class, and guessing which was the one I wanted
if ([NSStringFromClass([subview class]) isEqualToString:@"UITableViewCellEditControl"])
{
[subview setHidden:YES];
}
}
if ([self isEditing])
{
// Show the custom view however you want.
// The value of [self isSelected] will be useful...
}
else
{
// Hide the custom view.
}
}
我仍然会欢迎一个更...犹太洁食的解决方案。