一张图片胜过千言万语......
对于更多背景知识,我有一个UITableView,利用iOS 5的allowsMultipleSelectionDuringEditing
设置为YES
。这导致在单元格处于编辑模式时,单元格左侧显示空的和填充的编辑控件。这种行为正是我想要的。我只是想改变这些复选标记的外观。
我知道可以编写自定义选择逻辑并基本上滚动我自己的版本(如this和this),但这就是我想要避免的。系统已经到位,我想尽可能多地重复使用。
答案 0 :(得分:4)
这是我最接近的。它很简单并且有效,同时重复使用几乎所有的预烘烤系统。然而,它也是一个巨大的黑客攻击,并依赖于在一点运行时内省之后利用UITableViewCell
的未记录的视图层次结构。
简而言之,这只是隐藏了通常负责显示复选标记的视图,允许我添加可以在其位置显示的我自己的视图。然后,当单元格的选择或编辑状态发生变化时,我可以操纵这个替换视图......
为防止出现标准复选标记,所需的只是自定义-layoutSubviews
实施。根据文档,在-willTransitionToState:
和-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.
}
}
我仍然会欢迎更多的解决方案......犹太教。