0

UITableView如果用户单击它,我想更改 an 的部分索引的颜色。

我可以在初始化表格视图和任何其他状态时设置sectionIndexColorsectionIndexTrackingBackgroundColor,但我发现没有方法可以在单击时更改索引颜色。

更新:

我的意思是较大的 tableviews 中的 AZ 侧栏。这是一些图像(请参见图 2 中的灰色条)

未选中状态:

在此处输入图像描述

选择状态: 在此处输入图像描述

4

2 回答 2

1

我对此只有一个相当肮脏的解决方案,因为苹果不支持公共 api。我的实现效果很好,如果将来某些 api 发生变化(只是不再工作),也不应该崩溃。我将其子类化UITableView并将我自己的回调添加到 sectionIndex 视图中,并将其作为子视图添加到表中。

@interface MyTableView : UITableView

@end

@implementation MyTableView

- (void)selectionStarted {
    [self setSectionIndexColor:[UIColor greenColor]];
}

- (void)selectionStoped {
    [self setSectionIndexColor:[UIColor redColor]];
}

- (void)addSubview:(UIView *)view {
    [super addSubview:view];
    if ([NSStringFromClass([view class]) isEqualToString:@"UITableViewIndex"] && [view isKindOfClass:[UIControl class]]) {
        UIControl *cont = (UIControl *)view;
        [cont addTarget:self action:@selector(selectionStarted) forControlEvents:UIControlEventTouchDown];
        [cont addTarget:self action:@selector(selectionStoped) forControlEvents:UIControlEventTouchUpInside];
        [cont addTarget:self action:@selector(selectionStoped) forControlEvents:UIControlEventTouchUpOutside];
        [cont addTarget:self action:@selector(selectionStoped) forControlEvents:UIControlEventTouchCancel];
    }
}

@end
于 2013-07-25T13:16:16.757 回答
0

使用UITableView委托

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

然后修改需要的部分,你有 indexPath。

最简单的方法 - 只需将 indexPath 作为属性并重新加载tableView,然后viewForHeaderInSection你应该比较 indexPath 并设置你想要的颜色。

于 2013-07-25T12:42:35.980 回答