Хобрук: Ваш путь к мастерству в программировании

Цвет фона представления внутри пользовательского tableCell не отображается хорошо iOS

Я получаю цвет с сервера и в методе cellForRowAtIndexPath пытаюсь применить этот цвет к представлению внутри ячейки.

Проблема в том, что все ячейки отображают один и тот же цвет, пока я не прокручиваю таблицу вниз. Когда я начинаю прокручивать, они хорошо обновляют свой цвет.

Я новичок в iOS и Objective-C, поэтому, если бы вы могли мне помочь, я был бы признателен, спасибо.

Перед прокруткой:

Перед прокруткой

После прокрутки:

После прокрутки

Некоторый код: (Если вы хотите больше, пожалуйста, скажите мне)

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

   CalendarDayCell *cell = (CalendarDayCell *) [tableView dequeueReusableCellWithIdentifier:@"CalendarDayCell"];
    if (cell == nil) {
        cell = [[CalendarDayCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"CalendarDayCell"];
    }
    if (self.events.count) {
        CalendarEvent *ce = self.events[indexPath.row];
        CalendarDayCell *dayCell = (CalendarDayCell *) cell;
        // ...
        dayCell.viewColorBar.backgroundColor = [self colorWithHexString:ce.color];
        return dayCell;
    } else {
        // Not important
    }    
}

PS: я также пробовал это по методу willDisplayCell с теми же результатами.

ИЗМЕНИТЬ:

Наконец я понял, какие были решения.

  1. IDK, почему XCode изменил высоту цветной полосы на 980 пикселей с 50 пикселей, которые я указал в файле пера. И это приводило к тому, что все ячейки ниже имели одинаковый цвет.
  2. Я поместил все представления в другое представление и назначил это представление ячейке, потому что некоторые ячейки не отображали свой цвет.

это все


  • Вы пытались перейти [self.tableview reloadData], когда цвет должен был измениться? 08.06.2015
  • Да, но отображаются пустые ячейки. Возможно, мне следует упомянуть, что я использую TableView внутри ViewController, а не TableViewController. Спасибо. 08.06.2015

Ответы:


1

Проблема заключается в повторном использовании ячеек - это означает, что в пути cellForRowAtIndex вы должны установить цвет для каждого условия. Это легко воспроизвести с помощью изображений. Если вы установите изображение только иногда, вам придется установить для изображения значение none, когда вам не нужно его отображать. Что вам нужно сделать, так это обработать в блоке else элемент управления, который вы хотите изменить.

if(self.events.count){
    dayCell.viewColorBar.backgroundColor = [self colorWithHexString:ce.color];
}
else{
    dayCell.viewColorBar.backgroundColor = [UIColor clearColor];
}

Или что-то подобное.

08.06.2015
  • Self.events заполняется правильными данными, поэтому это не сработало. Спасибо. 08.06.2015
  • Есть ли место, где вы установили синий цвет? 08.06.2015
  • Нет, я получаю массив событий с сервера, каждое событие имеет цвет, и это то, что я пытаюсь присвоить представлению ячейки. В случае, если этот цвет не был правильным, вид становится желтым. 08.06.2015
  • можете ли вы изменить dayCell.viewColorBar.backgroundColor = [self colorWithHexString:ce.color]; на [UIColor redColor] и посмотреть, сохраняется ли проблема? 08.06.2015
  • это может быть проблема с источником данных (событиями) или самим методом. Также, если бы вы могли опубликовать пример строки ce.color 08.06.2015
  • Если я назначу фиксированный цвет, он работает, проблема в том, что каждая ячейка имеет разные цвета. Анализатор цвета работает хорошо, но пример цвета события: f2c821 или 3d21f2. 08.06.2015

  • 2

    Вы уверены, что self.events.count на самом деле не равно нулю? Возможно, табличное представление заполняется до того, как self.events будет правильно настроен.

    Например, контроллер представления может загружаться через viewDidLoad, затем UITableView, затем вы устанавливаете self.events. Если это так, self.events будет nil до тех пор, пока не будет загружен весь вид/контроллер представления. Это объясняет, почему он работает после начала прокрутки.

    08.06.2015
  • Да, self.events не равно нулю. Я проверил порядок загрузки, все должно быть в порядке. Спасибо. 08.06.2015
  • Является ли цвет viewColorBar.backgroundColor по умолчанию красно-оранжевым цветом на верхнем снимке экрана? Что произойдет, если вы просто установите cell.viewColorBar.bar.backgroundColor = [UIColor blueColor] и сразу вернете его — до if (self.events.count)? 08.06.2015
  • Неа. Цвет по умолчанию — желтый, установленный в раскадровке. Если я устанавливаю цвет снаружи, if (self.events.count), он хорошо показывает этот цвет. это как-то странно. 08.06.2015
  • Новые материалы

    Получение стоковых обновлений с помощью Python
    Для начинающего финансового аналитика Введение Описание: Этот проект Python создает скрипт для получения текущих обновлений акций с финансового веб-сайта Yahoo. Для этого проекта мы..

    Это все, что вам нужно знать о Kotlin в 2022 году
    Добро пожаловать! Kotlin — это язык программирования, популярность которого, кажется, растет, его действительно можно использовать для создания чего угодно, и если вы хотите узнать о Kotlin,..

    Текстовый графический интерфейс с Lanterna на Java
    Мой опыт работы с компьютерами (и текстовыми графическими пользовательскими интерфейсами) начался еще в восьмидесятых, когда я был ребенком, на дне рождения друга. Это был «новенький» Amstrad..

    Перезарядите свой мозг: умопомрачительный потенциал мозговых компьютерных интерфейсов
    Способность читать свои мысли и управлять объектами разумом долгое время были предметом человеческого любопытства, ограниченного областью научной фантастики… то есть до сих пор? С технологией,..

    Основы C# — Нулевой оператор объединения (??)
    Оператор ?? называется null-coalescing operator . Этот оператор используется для предоставления значения по умолчанию, если значение операнда в левой части оператора равно null ...

    Сравнение номеров версий в C++ с использованием синтаксического анализа строк
    Номера версий обычно используются для обозначения развития или обновлений программного обеспечения или любого другого продукта. При работе с номерами версий в C++ может быть полезно сравнить две..

    В мир искусственного интеллекта…
    ИИ — это новое топливо в современном мире. Куда бы вы ни обратились, с кем бы вы ни разговаривали — они, как правило, упоминают об ИИ хотя бы раз в ходе разговора. ИИ гудит повсюду. У каждого..