Как изменить цвет бокового алфавита в индексированном UITableView?
У меня есть табличное представление с алфавитным индексом, и я использую боковой алфавит, чтобы быстро пройти список. Для тех, кто не знаком, который использует это:
- (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index {
Моя проблема в том, что мое приложение только что было черным. Итак, теперь трудно увидеть буквы алфавита сбоку.
Я не могу понять, как изменить цвет алфавита. Я бы хотел, чтобы это было "белое", если это вообще возможно.
Ответы
Ответ 1
Из того, что я могу сказать, к сожалению, невозможно настроить цвет текста, отображаемого в индексе, самым близким, с которым я смог приехать, является возможность изменить цвет фона и шрифт индекса.
В поваренной книге iPhone Developers от Erica Sadun есть код, который показывает, как получить доступ к представлению 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 и изменить его в некоторых аспектах. Похоже, что в представлении нет каких-либо подзаголовков, поэтому, вероятно, он выполняет какой-то пользовательский чертеж с массивом заголовков индексов.
Это не идеально, но, надеюсь, это немного помогает.
Пол
Ответ 2
если ваша минимальная версия iOS новее 6.0, вы можете использовать свойство sectionIndexColor
UITableView
.
Цвет, который будет использоваться для текста индекса таблиц.
@property (неатомный, сохраняемый) UIColor * sectionIndexColor
Обсуждение:
Представления таблиц могут отображать указатель вдоль стороны представления, что делает его проще пользователям быстро перемещаться по содержимому таблицы. Эта свойство определяет цвет, используемый для текста, отображаемого в этой области.
Дата обновления 2014.1.13
Я нашел библиотеку сторонних разработчиков с открытым исходным кодом: GDIIndexBar, чтобы помочь настроить внешний вид индекса.
Ответ 3
Это легко можно изменить в построителе интерфейса для UITableView. Не нужно использовать недокументированные классы?
Смотрите снимок экрана ниже, так как вы можете увидеть цвет шрифта и цвет фона. Работайте хорошо!
![]()
Ответ 4
Для iOS7 или выше:
self.tableView.sectionIndexColor = [UIColor whiteColor];
self.tableView.sectionIndexBackgroundColor = [UIColor clearColor];
Ответ 5
У меня была такая же проблема, и я только что нашел способ сделать это, хотя это использует недокументированные классы и методы, поэтому подумайте об одном дополнительном времени, прежде чем пытаться загрузить его в App Store.
Я должен сказать, что я только пробовал это с iOS5, поэтому не знаю, будет ли он работать для предыдущих версий.
Я заимствовал и модифицировал пример кулинарной книги Эрика Сондерс, чтобы теперь он менял цвет текста на красный:
- (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...
}
Ответ 6
Мы успешно использовали следующий код:
for(UIView *view in [tableView subviews]) {
if([view respondsToSelector:@selector(setIndexColor:)]) {
[view performSelector:@selector(setIndexColor:) withObject:[UIColor whiteColor]];
}
}
который отлично работает - он очень похож на Mooglas ответ - но воздерживается от использования слова "UITableViewIndex".
Ответ 7
Вы можете установить цвет оттенка для tableView.
[[UITableView appearance] setTintColor:[UIColor purpleColor]];
Ответ 8
Есть способ изменить цвет индекса Алфавит.
В вашем файле заголовка объявите свой UITableView как свойство:
@property (weak, nonatomic) IBOutlet UITableView *mainTable;
Затем в вашем файле реализации viewDidAppear используйте следующую строку:
//Change the color of the UITableView index color
_mainTable.sectionIndexColor = [UIColor blackColor];
Ответ 9
Здесь лучшее решение, которое я нашел, чтобы настроить цвет фона в строке индекса сбоку. Он работает в iOS7 и, возможно, iOS6.
Добавьте это в свой просмотрDidLoad
if ([_tableView respondsToSelector:@selector(setSectionIndexColor:)]) {
_tableView.sectionIndexBackgroundColor = [UIColor clearColor];
_tableView.sectionIndexTrackingBackgroundColor = [UIColor whiteColor];
}
Первый цвет - по умолчанию, второй - цвет фона при прокрутке.
Ответ 10
Swift 5:
tableView.sectionIndexColor = .red
tableView.sectionIndexBackgroundColor = .clear
Ответ 11
Сделайте изменяемый массив, чтобы содержать альтернативную метку заголовка
В
-(NSArray * )sectionIndexTitlesForTableView:(UITableView * )tableView
возвращает массив @"", где количество пробелов между кавычками определяет ширину скроллера с подсветкой.
Попросите "sectionIndexTitlesForTableView" вызвать функцию метки обновления.
В этой функции удалите все метки в массиве, который вы создали ранее из своих супервизоров. Затем создайте и добавьте, однако, много ярлыков. Затем добавьте их в супервизор таблицы.
Это строки, необходимые для размещения меток в нужном месте.
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;
}
Надеюсь, что это поможет. Это не идеально, мне просто все равно, чтобы исправить это сам
Основная проблема заключается в том, что расстояние между последней меткой не равномерно.
Ответ 12
Быстрое издание для недокументированного изменения шрифта:
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")
}
}
}