如何更改索引UITableView中的边字符的颜色?

我有一个按字母顺序排列的表格视图,并且使用侧面字母表快速浏览列表。 对于那些不熟悉的人来说,使用这个:

- (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index { 

我的问题是,我的应用程序刚刚被剥黑。 所以现在很难看到旁边的字母。

我无法弄清楚如何改变字母表的颜色。 如果可能的话,我希望它是“白色的”。

从我可以告诉不幸的是,它是不可能自定义索引中显示的文本的颜色,最近我能够来是能够修改背景颜色和索引的字体。

Erica Sadun的iPhone Developers食谱中有一些代码,它展示了如何访问UITableViewIndex视图(一个未公开的类)。 如果有,请参阅本书第175页的参考资料。 它可以访问背景颜色和字体。 你可以在这里看到一个非官方的文件。

警告这是无证的使用无证课堂,所以你需要谨慎使用它。

这里是一个小菜鸟的代码片段,稍作修改:

 - (UITableViewCell *)tableView:(UITableView *)tv cellForRowAtIndexPath:(NSIndexPath *)indexPath { for(UIView *view in [tv subviews]) { if([[[view class] description] isEqualToString:@"UITableViewIndex"]) { [view setBackgroundColor:[UIColor whiteColor]]; [view setFont:[UIFont systemFontOfSize:14]]; } } //rest of cellForRow handling... } 

这说明了如何访问和UITableViewIndex视图,并在某些方面进行修改。 它看起来像视图没有任何子视图,所以它可能做一些与索引标题数组的自定义绘图。

这不是完美的,但希望它有一点帮助。

保罗

如果您的最低iOS版本比6.0更新,则可以使用UITableView sectionIndexColor属性。

用于表视图的索引文本的颜色。

@property(nonatomic,retain)UIColor * sectionIndexColor

讨论:

表视图可以沿着视图的侧面显示索引,使用户可以更轻松地快速浏览表格的内容。 此属性指定用于显示在此区域中的文本的颜色。


更新date2014.1.13

我find一个开源的第三方库: GDIIndexBar来帮助自定义索引外观。

这可以很容易地在UITableView的界面生成器中进行更改 – 不需要使用未logging的类?

看到下面的截图,你可以看到字体的颜色和背景颜色也可以改变。 乔布斯是个好人!

对于iOS7或更高版本:

 self.tableView.sectionIndexColor = [UIColor whiteColor]; self.tableView.sectionIndexBackgroundColor = [UIColor clearColor]; 

我有同样的问题,只是find了一个这样做的方式,虽然这是使用未公开的类和方法,所以想想一个额外的时间,然后再尝试上传到App Store。 我应该说,我只用iOS5试过,所以我不知道它是否适用于以前的版本。

我借用并修改了Erica Saunders食谱示例,以便现在将文本颜色更改为红色:

 - (UITableViewCell *)tableView:(UITableView *)tv cellForRowAtIndexPath:(NSIndexPath *)indexPath { for(UIView *view in [tv subviews]) { if([[[view class] description] isEqualToString:@"UITableViewIndex"]) { [view performSelector:@selector(setIndexColor:) withObject:[UIColor redColor]]; } } //rest of cellForRow handling... } 

我们已经成功地使用了下面的代码:

 for(UIView *view in [tableView subviews]) { if([view respondsToSelector:@selector(setIndexColor:)]) { [view performSelector:@selector(setIndexColor:) withObject:[UIColor whiteColor]]; } } 

它工作正常 – 它与Mooglas的答案非常相似 – 但是避免使用“UITableViewIndex”这个词。

您可以设置tableView的色调颜色。

 [[UITableView appearance] setTintColor:[UIColor purpleColor]]; 

有一种方法来改变索引字母的颜色。

在你的头文件中,将你的UITableView声明为一个属性:

 @property (weak, nonatomic) IBOutlet UITableView *mainTable; 

然后在你的实现文件的viewDidAppear中,使用下面一行:

 //Change the color of the UITableView index color _mainTable.sectionIndexColor = [UIColor blackColor]; 

这里是我find的最好的解决scheme来调整侧面的索引栏的背景颜色。 它适用于iOS7和iOS6。

将此添加到您的viewDidLoad

 if ([_tableView respondsToSelector:@selector(setSectionIndexColor:)]) { _tableView.sectionIndexBackgroundColor = [UIColor clearColor]; _tableView.sectionIndexTrackingBackgroundColor = [UIColor whiteColor]; } 

第一个是默认颜色,第二个是滚动时的背景颜色。

让一个可变数组包含替代标题标签In

 -(NSArray * )sectionIndexTitlesForTableView:(UITableView * )tableView 

返回@“”的数组,其中引号之间的空格数决定了高亮滚动条的宽度。 有“sectionIndexTitlesForTableView”调用更新标签function。 在该函数中,删除先前从其超级视图中创build的数组中的所有标签。然后创build并添加许多标签。 然后将它们添加到表的超级视图。

这些是将标签放置在正确位置所需的线。

 rect.origin.x = table.frame.origin.x+table.frame.size.width-rect.size.width-2; rect.origin.y = 5+table.frame.origin.y+counter *(280-rect.size.height-([customIndexLabels count]-1))/([customIndexLabels count]-1); if ([customIndexLabels lastObject]==thisLabel) { rect.origin.y-=10; } 

希望有所帮助。 这并不完美我只是不在乎自己修复主要问题是最后一个标签的间距不统一。

无证字体更改的Swift版本:

 extension NSObject { class func objectClassName() -> String { let classLongName = reflect(self.self).summary; let tokens = classLongName.componentsSeparatedByString(".") if let typeName = tokens.last { return typeName } return NSStringFromClass(self.dynamicType) } } func changeSectionIndexFont(tableView: UITableView) -> Void { let realSubviews = tableView.subviews as! [UIView] for subview in realSubviews { if subview.dynamicType.objectClassName() == "UITableViewIndex" { subview.setValue(UIFont(name: "OpenSans", size: 10), forKey: "font") } } }