2013-02-26 2 views
0

Я занимаюсь некоторыми объектами через Core Data и NSFetchedResultsController, и я пытаюсь применить к ним условное форматирование на основе одного из своих логических свойств. Если они отмечены как Liked, я хочу, чтобы их цвет текста был синим, например.Правильный способ установки условного форматирования в UITableViewCell в зависимости от его содержимого?

Проблема, которую я нахожу, заключается в том, что при прокрутке стола больше, чем только с Liked, так как YES окрашиваются. Это обычный шаблон, например, каждую шестую запись, когда я прокручиваю вниз. Я думаю, что это как-то связано с очередностью ячейки и повторным использованием, но я понятия не имею, что. Вот мой код:

- (UITableViewCell *) tableView: (UITableView *) tableView cellForRowAtIndexPath: (NSIndexPath *) indexPath 
{ 
    static NSString *CellIdentifier = @"Cell"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier: CellIdentifier forIndexPath: indexPath]; 

    Quote *thisQuote = [self.fetchedResultsController objectAtIndexPath: indexPath]; 

    cell.textLabel.numberOfLines = 4; 
    cell.textLabel.font = [UIFont boldSystemFontOfSize: 12]; 
    cell.textLabel.textAlignment = NSTextAlignmentCenter; 
    cell.textLabel.text = [[self.fetchedResultsController objectAtIndexPath: indexPath] quote]; 

    if ([[thisQuote isLiked] boolValue]) { 
     cell.textLabel.textColor = [UIColor blueColor]; 
    } 

    return cell; 
} 

ответ

2

Как вы используете dequeueReusableCellWithIdentifier:, вы должны сбросить свойство TextColor для каждой ячейки:

if ([[thisQuote isLiked] boolValue]) { 
    cell.textLabel.textColor = [UIColor blueColor]; 
} 
else cell.textLabel.textColor = [UIColor blackColor]; 
+0

Это ма нет никакой разницы. – Luke

+0

Поцарапать, что да, это доступ к NSNumber, а не к его boolValue. Спасибо :) – Luke

+0

Добро пожаловать :) – Bigood

0

Для каждой шестой ячейки, вы всегда можете сделать:

if(indexPath.row % 6 == 0) { 
    // Set blue color 
} 
else { 
    // Set black color 
} 

или проще:

cell.textLabel.textColor = (indexPath.row % 6 == 0) ? [UIColor blueColor] : [UIColor blackColor]; 
+0

Я не хочу каждую шестую ячейку, вот что происходит сейчас, я хочу, чтобы только те, у кого есть bool, как YES, были окрашены. – Luke

Смежные вопросы