3

一张图抵得上一千个字……

在此处输入图像描述

对于更多背景知识,我有一个利用 iOS 5 的 UITableViewallowsMultipleSelectionDuringEditing设置为YES. 这会导致在单元格处于编辑模式时,单元格左侧会显示空的和​​填充的编辑控件。这种行为正是我想要的。我只想更改这些复选标记的外观。

我知道可以编写自定义选择逻辑并基本上推出我自己的版本(如thisthis),但这是我想要避免的。该系统已经到位,我想尽可能多地重复使用它。

4

1 回答 1

4

这是我最近的一次。它简单且有效,同时重用几乎所有预烘焙系统。然而,这也是一个巨大的 hack,并且依赖于UITableViewCell在一点运行时内省之后利用未记录的视图层次结构。

简而言之,这只是隐藏了通常负责显示复选标记的视图,允许我添加可以在其位置显示的自己的视图。然后,当单元格的选择或编辑状态发生变化时,我可以操纵这个替代视图......

为了防止出现标准复选标记,只需要自定义-layoutSubviews实现即可。根据文档,在-willTransitionToState:and之后调用它,确保状态在or更改-setEditing:animated:时始终有效。isSelectedisEditing

- (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.
    }
}

我仍然会欢迎一个更...犹太洁食的解决方案。

于 2012-07-27T21:17:24.213 回答