Подтвердить что ты не робот

Как изменить цвет бокового алфавита в индексированном UITableView?

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

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

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

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

4b9b3361

Ответ 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")
            }
        }
    }