2010-08-08 8 views
9

Я загружаю пользовательский файл nib для настройки ячеек UITableView. Пользовательский nib имеет UILabel, на который ссылается основной вид по тегу. Я хотел бы знать, можно ли изменить цвет тени UILabel, когда ячейка выбрана для другого цвета, поэтому на скриншоте это не похоже.UILabel тень от пользовательской ячейки выбранного цвета

screenshot

ответ

11

Вы можете изменить цвет тени лейбла в -tableView:willSelectRowAtIndexPath: в делегатом. Например:

-(NSIndexPath*)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    UITableViewCell* cell = [tableView cellForRowAtIndexPath:indexPath]; 
    cell.textLabel.shadowColor = [UIColor greenColor]; 
    return indexPath; 
} 
-(void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath { 
    UITableViewCell* cell = [tableView cellForRowAtIndexPath:indexPath]; 
    cell.textLabel.shadowColor = [UIColor redColor]; 
} 
+3

Этот ответ не работает для выделенного состояния ячейки (т. Е. Если пользователь нажимает на ячейку, но не отпускает). Ответ Джейсона, к сожалению, является лучшим, что я видел, чтобы справиться с этим делом. К сожалению, это связано с подклассом. Вам также может потребоваться переопределить setSelected: – Prometheus

16

Я предпочитаю изменять цвет тени внутри кода TableCell, чтобы не загрязнять делегата. Вы можете переопределить этот метод, чтобы справиться с этим:

- (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animate 
{ 
    UIColor * newShadow = highlighted ? [UIColor clearColor] : [UIColor whiteColor]; 

    nameLabel.shadowColor = newShadow; 

    [super setHighlighted:highlighted animated:animate]; 
} 
0

Простой ответ, по крайней мере, на примере, приведенном выше, чтобы не отображать тень в первую очередь. Так как вы все равно не видите белый-на-белом, установите для shadowColor значение -clearColor.

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

2

У меня была такая же проблема, и ни одно из вышеперечисленных решений не сработало для меня - я не хотел подкласса UITableViewCell, а также имел некоторые сложные выбранные/выделенные изменения состояния, сделанные программно, что не очень хорошо отразилось на решениях выше ,

MySolution:

То, что я сделал в конце концов, использовать второй UILabel под первичным UILabel действовать как тень. Для этой «тени» UILabel вы можете установить «Выделенный цвет» на «Очистить цвет».

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

Надеюсь, что это поможет!

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