Как изменить цвет бокового алфавита в индексированном UITableView? - PullRequest
45 голосов
/ 15 апреля 2009

У меня есть табличное представление с алфавитным индексом, и я использую боковой алфавит для быстрого просмотра списка. Для тех, кто не знаком с этим:

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

Моя проблема в том, что мое приложение было очищено от черного цвета. И теперь трудно увидеть буквы алфавита сбоку.

Я не могу понять, как изменить цвет алфавита. Я бы хотел, чтобы он был «белым», если это вообще возможно.

Ответы [ 12 ]

61 голосов
/ 14 августа 2013

если ваша минимальная версия iOS новее 6.0, вы можете использовать sectionIndexColor свойство UITableView.

Цвет, используемый для индексного текста табличного представления.

@ свойство (неатомное, сохранение) UIColor * sectionIndexColor

Обсуждение:

Табличные представления могут отображать индекс вдоль стороны представления, делая его пользователям легче быстро перемещаться по содержимому таблицы. это свойство определяет цвет, который будет использоваться для текста, отображаемого в этом регионе.


Дата обновления 2014.1.13

Я нашел стороннюю библиотеку с открытым исходным кодом: GDIIndexBar , чтобы помочь настроить внешний вид индекса.

32 голосов
/ 17 апреля 2009

Из того, что я могу сказать, к сожалению, невозможно настроить цвет текста, отображаемого в индексе, самое близкое, что я смог найти, - это возможность изменить цвет фона и шрифт индекса.

В кулинарной книге разработчиков iPhone от Эрики Садун есть код, показывающий, как получить доступ к представлению 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 и изменить его в некоторых аспектах. Похоже, что представление не имеет никаких подпредставлений, поэтому, скорее всего, оно выполняет произвольный рисунок с массивом заголовков индекса.

Это не идеально, но, надеюсь, это немного поможет.

Пол

21 голосов
/ 25 июня 2014

Это можно легко изменить в конструкторе интерфейса для UITableView. Нет необходимости использовать недокументированные классы?

См. Скриншот ниже, так как вы можете видеть цвет шрифта и цвет фона. Работа хорошая!

16 голосов
/ 09 сентября 2015

Для iOS7 или выше:

self.tableView.sectionIndexColor = [UIColor whiteColor];
self.tableView.sectionIndexBackgroundColor = [UIColor clearColor];
11 голосов
/ 02 мая 2012

Мы успешно использовали следующий код:

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

, который работает нормально - он очень похож на ответ Mooglas - но воздерживается от использования слова "UITableViewIndex".

11 голосов
/ 25 октября 2011

У меня была та же проблема, и я только что нашел способ сделать это, хотя это использует недокументированные классы и методы, поэтому подумайте еще раз, прежде чем пытаться загрузить его в 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...

}
8 голосов
/ 06 ноября 2013

Вы можете установить цвет оттенка для tableView.

[[UITableView appearance] setTintColor:[UIColor purpleColor]];
4 голосов
/ 04 ноября 2014

Есть способ изменить цвет указателя алфавита.

В заголовочном файле объявите свой UITableView как свойство:

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

Затем в viewDidAppear вашего файла реализации используйте следующую строку:

//Change the color of the UITableView index color
_mainTable.sectionIndexColor = [UIColor blackColor];
3 голосов
/ 18 ноября 2013

Вот лучшее решение, которое я нашел, чтобы настроить цвет фона на полосе указателя сбоку. Это работает в iOS7 и, вероятно, iOS6.

Добавьте это к вашему представлениюDidLoad

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

Первый - это цвет по умолчанию, а второй - цвет фона при прокрутке.

1 голос
/ 14 августа 2018

Swift 4.1 и Xcode 9.4:

tableView.sectionIndexColor = .red
tableView.sectionIndexBackgroundColor = .clear
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...