изменение цвета текста в пользовательском UITableViewCell iphone - PullRequest
4 голосов
/ 19 мая 2010

У меня есть пользовательская ячейка, и когда пользователь выбирает эту ячейку, я бы хотел, чтобы текст в двух UILabels изменился на светло-серый.

ChecklistCell.h:

#import <UIKit/UIKit.h>


@interface ChecklistCell : UITableViewCell {
    UILabel *nameLabel;
    UILabel *colorLabel;
    BOOL selected;


}

@property (nonatomic, retain) IBOutlet UILabel *nameLabel;
@property (nonatomic, retain) IBOutlet UILabel *colorLabel;



@end

ChecklistCell.m:

#import "ChecklistCell.h"


@implementation ChecklistCell
@synthesize colorLabel,nameLabel;
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
    if ((self = [super initWithStyle:style reuseIdentifier:reuseIdentifier])) {
        // Initialization code
    }
    return self;
}


- (void)setSelected:(BOOL)selected animated:(BOOL)animated {

    [super setSelected:selected animated:animated];

    // Configure the view for the selected state
}


- (void)dealloc {
    [nameLabel release];
    [colorLabel release];
        [super dealloc];
}


@end

Ответы [ 5 ]

13 голосов
/ 26 января 2011

Поскольку вы используете настраиваемую ячейку таблицы, вы можете реализовать код для установки цветов меток, реализовав методы setSelected и setHighlighted в своем пользовательском UITableViewCell. Это будет фиксировать все изменения состояния из выделения, хотя есть некоторые хитрые случаи, например, когда setHighlighting вызывается с NO, когда вы выбираете и перетаскиваете за пределы ячейки после того, как она уже была выбрана. Вот подход, который я использовал, который, я считаю, устанавливает цвет соответствующим образом во всех случаях.

- (void)updateCellDisplay {
    if (self.selected || self.highlighted) {
        self.nameLabel.textColor = [UIColor lightGrayColor];
        self.colorLabel.textColor = [UIColor lightGrayColor];
    }
    else {
        self.nameLabel.textColor = [UIColor blackColor];
        self.colorLabel.textColor = [UIColor blackColor];
    }
}

- (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated {
    [super setHighlighted:highlighted animated:animated];
    [self updateCellDisplay];
}

- (void) setSelected:(BOOL)selected animated:(BOOL)animated {
    [super setSelected:selected animated:animated];
    [self updateCellDisplay];
}
5 голосов
/ 19 мая 2010

В вашем методе didSelectRowAtIndexPath вызовите текущую ячейку и обновите ее соответствующим образом:

CheckListCell* theCell = (CheckListCell*)[tableView cellForRowAtIndexPath:indexPath];
theCell.nameLabel.textColor = [UIColor lightGrayColor];
theCell.colorLabel.textColor = [UIColor lightGrayColor];
0 голосов
/ 31 октября 2013

Это очень просто, вам просто нужно использовать этот (ниже) метод, здесь я устанавливаю альтернативный цвет ячейки

-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (indexPath.row%2 == 0) 
    {
         tCell.cellLabel.textColor = [UIColor grayColor];
    }
    else
    {
         tCell.cellLabel.textColor = [UIColor blackColor];
    }
}

PS - не нужно использовать cellForRowAtIndexPath: метод для изменения cellText Propties ..

0 голосов
/ 09 сентября 2010

Способ, которым я сортировал это, был в цикле "didSelectRowAtIndexPath:" через все подпредставления tableView и установил для всех текстовых меток цвет по умолчанию следующим образом:

for(CustomTableViewCell *tableCell in [tableView subviews]) {
    if([tableCell isKindOfClass:[UITableViewCell class]]) {
        [tableCell.textLabel setTextColor: [UIColor blackColor]];
    }
}

.... затем установите выбранную ячейку таблицы на белый.

[[tableView cellForRowAtIndexPath:indexPath].textLabel setTextColor: [UIColor whiteColor]];
0 голосов
/ 19 мая 2010

В tableView:didSelectRowAtIndexPath: записать путь индекса выбранной ячейки. В tableView:cellForRowAtIndexPath: просто проверьте, соответствует ли он сохраненному пути индекса, и соответственно установите цвет текста. Я не совсем уверен, следует ли перерисовывать ячейку после выделения, поэтому вам может потребоваться reloadData после выделения, но это должно быть достаточно быстро, если вы кэшируете ячейки / придерживаетесь обычной практики рисования ячейки.

Или используйте reloadRowsAtIndexPaths:withRowAnimation с UITableViewRowAnimationNone. Но затем вам нужно будет отследить последнюю ячейку, которую вы нарисовали серым текстом, и перерисовать ее также простым шрифтом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...