Как проверить, равны ли субтитры ячеек табличного представления друг другу iOS

Мне интересно, есть ли способ проверить, равен ли detailTextLabel.text ячейки детали DetailTextLabel.text другой ячейки.

Причина этого в том, что я хотел бы установить для detailTextLabel.textColor один и тот же цвет, если тексты ячеек равны друг другу.

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

Я боюсь, что добавление моего кода может сделать вещи немного более запутанными, так как я извлекаю подзаголовок из основных данных на основе текста поиска пользователя (там просто много чего происходит, поскольку я также настаиваю на основных данных из источника данных). Так что сами субтитры в каком-то смысле случайны. Мое приложение, по сути, позволяет пользователю искать достопримечательности на основе категории. Поэтому, если пользователь ищет пиццу, на карте будут отображаться все местные рестораны, где подают пиццу. Затем вы можете сохранить эту конкретную достопримечательность, а подзаголовок будет установлен на пиццу (или на то, что искал пользователь). Таким образом, можно иметь несколько записей с подзаголовком «пицца» (если пользователь сохраняет несколько достопримечательностей на основе «пиццы»).

Попробуйте забыть о логистике установки цвета, мне просто хотелось бы знать, как я могу проверить, равны ли субтитры друг другу в TableView. Я должен указать, что мы не проверяем, равен ли фактический текст определенной строке:

Нет:

if(cell.detailTextLabel.text == @"pizza"){
   cell.detailTextLabel.textColor = randomColor;
}

Что-то вроде этого

if(cell.detailTextLabel.text == some other detailTextLabel){
   cell.detailTextLabel.textColor = randomColor;
}

Пример основных данных

self.category — это мой NSManagedObject. В этом случае я уже смог сохранить случайно сгенерированный цвет для основных данных. Все, что мне действительно нужно, это логика, чтобы установить цвет, равный субтитрам, которые также были сохранены в основных данных.

-(void)configureCell:(CategoryTableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath{
    //fetch record
    NSManagedObject *record = [self.fetchedResultsController objectAtIndexPath:indexPath];
    self.category = [self.fetchedResultsController objectAtIndexPath:indexPath];

    float red = [self.category.red floatValue];
    float green = [self.category.green floatValue];
    float blue = [self.category.blue floatValue];

    UIColor *randomRGBColor = [[UIColor alloc] initWithRed:red green:green blue:blue alpha:1.0];
    //update cell
    [cell.textLabel setText:[record valueForKey:@"name"]];
    cell.backgroundColor = randomRGBColor;

}

person Alex Blair    schedule 22.07.2015    source источник


Ответы (2)


Я думаю, что ваш подход неверен. Почему вы должны сравнивать строки в отображаемых ячейках, а не до того, как они начнут отображаться. Когда вы создаете свой UITableView, у вас есть определенный источник данных, по крайней мере, массив NSString (заголовков). Вы можете реализовать метод рендеринга, в котором вы перебираете массив заголовков, находите равные и создаете новый массив, например, NSDictionary, где для ключа @"title" у вас есть свой заголовок, а для ключа @"color" вы уже вычислили цвет. И в вашем методе tableView:cellForRowAtIndex вы просто получаете цвет из массива и назначаете экземпляр UITableViewCell вместе с назначением текста detailTextLabel.

person teamnorge    schedule 22.07.2015
comment
безусловно, вы можете использовать класс управляемых объектов Core Data вместо NSDictionary и хранить там предварительно рассчитанные цвета. Как вы сейчас получаете к нему доступ, используете ли вы NSFetchedResultsController? - person teamnorge; 22.07.2015
comment
ага! Я уже сохраняюсь и получаю другие атрибуты - person Alex Blair; 22.07.2015
comment
Я добавил пример к моему вопросу, вы можете проверить его - person Alex Blair; 22.07.2015
comment
@ Алекс Блэр, я понимаю твою точку зрения, есть некоторые идеи, но я не уверен. Самый простой способ — пройтись по вашим данным, создать NSFetchRequest для вашего объекта и вызвать countForFetchRequest для каждого, но я думаю, что это не очень хорошая идея. Другое решение — удалить уже извлеченные объекты и, наконец, отсортировать данные. - person teamnorge; 22.07.2015
comment
Я прекрасно понимаю, откуда вы. У меня есть некоторые идеи, но я в той же лодке. Просто не уверен. Я думаю, что, возможно, нашел решение ... ну, это больше хитрость, чем решение. Я только что заказал свой список по разделам. Поэтому вместо того, чтобы находить одинаковые субтитры, мне интересно, могу ли я установить цвета фона меток разделов и просто установить цвет субтитров, равный цвету фона раздела .... сложно, сложно. В любом случае, я ценю это. Я проголосую, и если это достойно, я тоже буду признателен. - person Alex Blair; 22.07.2015

Вы можете сделать что-то подобное со словарем на уровне данных, где вы связываете субтитры с определенным цветом.

var dict = [String: UIColor]
...
if let color = dict[subtitle] {
   //set the color of the cell   
} else {
   let newColor = //some color you haven't used yet
   dict[subtitle] = newColor
}
person 72A12F4E    schedule 22.07.2015
comment
Вы случайно не знаете объектив-с, не так ли? Я еще не добрался до Swift / - person Alex Blair; 22.07.2015