2010-11-17 3 views
6

Мне нужно добавить скос в UITableViewCell (белая линия сверху, темная линия внизу). У меня уже есть CAGradientLayer, который добавлен как подзаголовок моего cell.layer. К сожалению, я не могу использовать UIImageView в качестве фона для своих ячеек, поэтому это нужно сделать в коде. Какие-либо предложения? Благодаря!Как добавить Bevel в UITableViewCell

Это код, который у меня есть для фона моей ячейки.

CAGradientLayer *gradientLayer = [CAGradientLayer layer]; 
gradientLayer.frame = cell.frame; 
gradientLayer.colors = [NSArray arrayWithObjects: 
    (id)[[UIColor colorWithRed:0.988 green:0.988 blue:0.988 alpha:1.0] CGColor], 
    (id)[[UIColor colorWithRed:0.9294 green:0.9294 blue:0.949 alpha:1.0] CGColor], 
    nil]; 
[cell.layer insertSublayer:gradientLayer atIndex:0]; 

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

ответ

6

Вы можете и, вероятно, должны использовать UIImageView в качестве фона ячейки. То, что вы сейчас делаете, на самом деле совершенно неверно.

А UITableViewCell состоит из довольно много видов в гиархите, важно знать, где вы должны зацепиться за свои взгляды. Эта иерархия выглядит следующим образом:

  • UITableViewCell - Никогда не прикасайтесь к этому
    • backgroundView - Replace установить собственный фон для всех строк.
    • selectedBackgroundView - Заменить, чтобы установить собственный фон для выбранных/выделенных строк.
    • contentView - Не устанавливайте это, но не стесняйтесь, добавляйте столько подобивок, сколько хотите.
      • titleLabel
      • detailTitleLabel
      • imageView
      • Ваши собственные взгляды
    • accessoryView

С самого начала неясно, как заменить backgroundView и selectedBackgroundView. UITableView сам установит их автоматически после того, как вы вернете ячейку из -[tableView:cellForRowWithIndexPath:] источника данных. Значение всего, что вы установили там, всегда будет переопределено.

Уловка заключается в том, чтобы реализовать метод делегатов -[tableView:willDisplayCell:forRowAtIndexPath:] и задать свой собственный фон здесь.

Все это достаточно хорошо объяснено в документе Table View Programming Guide.

+0

PeyloW, спасибо большое! Я поменяю свой код соответственно, я ценю информацию! – NSAlexC

+0

PeyloW, спасибо, что отлично поработал. Я прочитал яблочный документ и сейчас чувствую себя намного лучше. Еще раз спасибо! – NSAlexC

+0

@ziggie: Мое удовольствие - не забывайте отмечать ответ как принятый, как только ваша проблема решена.Помогает другим быстрее находить решение и помогает мотивировать любого, кто ответил. – PeyloW

1

Посмотрите на this link. Вы можете игнорировать эффект блеска, но в остальном я думаю, что это то, что вы хотите.

+0

Вы горделите насмешливым! Это работает сейчас. – NSAlexC

+0

Эта ссылка не работает. –

+0

Обновленная ссылка будет (надеюсь) более постоянной. – slycrel

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