Как установить цвет фона для заголовка конкретного раздела?

У меня есть TableView с 10 разделами, которые загружаются из файла plist, и у меня есть переключатели, с помощью которых некоторые разделы можно отключить. Мне нужно установить определенный цвет фона для каждого раздела с тем, что раздел можно отключить.

Пример:

for section Black I need to set black background

for section Red I need to set red background

и так далее...

-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
    UIView *tempHeaderView=[[UIView alloc]initWithFrame:CGRectMake(0,0,320,44)];
     tempHeaderView.backgroundColor=[UIColor blackColor];

     [tempHeaderView addSubView: tempHeaderLabel];
     return tempHeaderView;
}
0
Если вы не используете ARC (автоматический подсчет ссылок), ваш код пропускает tempHeaderView. Проверьте мой ответ на исправление в этом случае.
добавлено автор Nicolas Miari, источник
+1 для использования ARC :)
добавлено автор Nicolas Miari, источник
Я использую ARC ... спасибо!
добавлено автор Pavel Kaljunen, источник

2 ответы

Храните NSArray объектов UIColor как переменную экземпляра вашего класса (контроллер представлений, который действует как объект делегирования/источника данных), например, вы называете его sectionColors код>. Вы можете инициализировать цвета в этом массиве из значений в вашем plist или жестко закодировать цвета.

Затем используйте этот код:

-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
    UIView *tempHeaderView=[[UIView alloc]initWithFrame:CGRectMake(0,0,320,44)];


   //This changed:
    tempHeaderView.backgroundColor = [sectionColors objectAtIndex:section];

    [tempHeaderView addSubView: tempHeaderLabel];

    return tempHeaderView;
   //Use 'return [tempHeaderView autorelease];' in a non-ARC environment
}

Так вы можете инициализировать массив:

// Assuming your table has three sections (indices 0 through 2)

UIColor* colorForSection0 = [UIColor colorwithRed:redValue0 green:greenValue0 blue:blueValue0 alpha:1.0];
// redValue0, etc. are floats between 0.0 and 1.0 that you can read from a .plist
// Alternatively, store them as integers between 0 and 255, and divide them by 255.0 
// and store on CGFloat variables before creating color.

// ...Do the same for the other colors...

// Now that you have the colors, create array and store in ivar 'sectionColors'
sectionColors = [[NSArray alloc] initWithObjects: 
    ColorforSection0, ColorForSection1, colorForSection2, nil];

(код выше должен войти в инициализатор источника данных таблицы)

3
добавлено
Конечно ... Но вы можете читать значения R, G, B из plist и соответственно инициализировать цвета. Но идея такая же: ему нужен массив UIColor и выбрать цвет в разделе «index». Я не вдавался в подробности о том, КАК он должен создать массив.
добавлено автор Nicolas Miari, источник
Я только что отредактировал ответ, чтобы было ясно, что вы не можете напрямую читать UIColor из .plist.
добавлено автор Nicolas Miari, источник
Я приведу вам пример, и вы дадите мне галочку;)
добавлено автор Nicolas Miari, источник
Я не эксперт InterfaceBuilder, но, возможно, есть способ сохранить массив цветов где-то в соответствующем NIB?
добавлено автор Nicolas Miari, источник
Я думаю, что это то, что мне нужно. Спасибо!
добавлено автор Pavel Kaljunen, источник
UIColor не может быть непосредственно сохранен в plist, но эта концепция может быть легко адаптирована для использования строк в plist для представления того, какой цвет использовать.
добавлено автор Chris Trahey, источник
Примечание по чистоте MVC; рекомендуется, чтобы все, что было в plist, было только моделью (то есть состоянием разрешенных разделов), а не стилем (то есть, какой цвет должен быть отключен). Таким образом, такое решение должно включать в себя представление, ответственное за сокращение массива UIColors. Возможно, педантик, но у нас есть эти шаблоны по какой-то причине, поэтому стоит упомянуть.
добавлено автор Chris Trahey, источник

Вам нужно будет использовать переданный раздел и связать его с одним из разделов в вашем файле plist. Вероятно, вы загрузите словарь «раздела», как он существует в plist (возможно, он загружен на основе его позиции в массиве, который будет таким же, как и раздел), а затем используйте valueForKey: @ «enabled» или подобное в if() проверьте и установите свое состояние соответственно.

2
добавлено
Mobile Dev Jobs — вакансии и аналитика
Mobile Dev Jobs — вакансии и аналитика
6 187 участник(ов)

Публикуем вакансии и запросы на поиск работы по направлению iOS, Android, Xamarin и т.д. ВАЖНО: Правила публикации и правила канала: Ссылка – https://telegra.ph/Pravila-oformleniya-vakansij-i-rezyume-11-09-2

iOS Developers — русскоговорящее сообщество
iOS Developers — русскоговорящее сообщество
2 400 участник(ов)

Общаемся на темы, посвященным iOS-разработке, Swift, Objective-C, SDK, Rx, Cocoa и т.д.