2010-03-31 5 views

ответ

200

Вы можете изменить цвет подсветки несколькими способами.

  1. Изменить свойство selectionStyle вашей ячейки. Если вы измените его на UITableViewCellSelectionStyleGray, он будет серым.

  2. Изменить selectedBackgroundView Недвижимость. Фактически, что создает синий градиент, это вид. Вы можете создать представление и нарисовать то, что вам нравится, и использовать представление в качестве фона ваших ячеек просмотра таблицы.

+8

круто, найденных хорошее объяснение и пример здесь: http: //cocoawithlove.com/2009/04/easy-custom-uitableview-drawing.html –

+1

Я понял, что в IB вы не можете установить UITableViewCell «Selectio n "до" None "- потому что' selectedBackgroundView' будет тогда просто никогда не появляться. Только после установки «Выбор» по умолчанию появляется «selectedBackgroundView». Протестировано на iOS 6 и 7. – Jonny

+11

Спасибо за замечание! Это делает его настолько простым: вы создаете новый вид (нет необходимости даже указывать фрейм: 'cell.selectedBackgroundView = [UIView new];' и вы устанавливаете любой цвет, который вы хотите: 'cell.selectedBackgroundView.backgroundColor = [UIColor colorWithHex : @ "ecf2f5" иAlpha: 1]; ' –

29

UITableViewCell имеет три стиля выбора по умолчанию: -

  1. Синий
  2. Серый
  3. None

Реализация заключается в следующем: -

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *) indexPath { 

    [cell setSelectionStyle:UITableViewCellSelectionStyleNone];  
} 
+7

, а не эти три стиля по умолчанию, мы также можем настроить для нашего ожидаемого стиля свойство selectedBackgroundView. –

+0

Работал для меня ... Спасибо тонну. –

139

Zonble уже предоставил отличный ответ. Я подумал, что может быть полезно включить короткий фрагмент кода для добавления UIView в ячейку tableview, которая будет отображаться в качестве выбранного фонового представления.

cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease]; 

    UIView *selectionColor = [[UIView alloc] init]; 
    selectionColor.backgroundColor = [UIColor colorWithRed:(245/255.0) green:(245/255.0) blue:(245/255.0) alpha:1]; 
    cell.selectedBackgroundView = selectionColor; 
  • клетка мой UITableViewCell
  • Я создал UIView и установить цвет фона, используя RGB цвета (светло-серый)
  • Затем я ячейку selectedBackgroundView быть UIView, что я создал с моим выбранный цвет фона

Это хорошо сработало для меня. Спасибо за отзыв Zonble.

+2

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

+7

@kirk, вы имеете в виду группировку :) – Tieme

+0

@Tieme, нет, я имею в виду [разделы] (http://developer.apple.com/library/ios/#documentation/uikit/reference/UITableView_Class/Reference/Reference.html): «Вид таблицы состоит из нуля или более разделов, каждый со своими собственными строками». –

14

Если вы хотите изменить это приложение широко, вы можете добавить логику к вашему App делегату

class AppDelegate: UIResponder, UIApplicationDelegate { 

    //... truncated 

    func application(application: UIApplication!, didFinishLaunchingWithOptions launchOptions: NSDictionary!) -> Bool { 

     // set up your background color view 
     let colorView = UIView() 
     colorView.backgroundColor = UIColor.yellowColor() 

     // use UITableViewCell.appearance() to configure 
     // the default appearance of all UITableViewCells in your app 
     UITableViewCell.appearance().selectedBackgroundView = colorView 

     return true 
    } 

    //... truncated 
} 
+0

Отлично. Любая идея, как установить цвет текста этой ячейки по умолчанию на выбор? – BananaAcid

+1

это работает, но затем выбор удаляется непосредственно при нажатии нового контроллера вида. – bobmoff

+0

Хороший способ сделать глобальные изменения в UITableViewCell – Shashi3456643

7

Я должен установить стиль выбора для UITableViewCellSelectionStyleDefault для пользовательского цвета фона для работы. Если какой-либо другой стиль, пользовательский цвет фона будет проигнорирован. Проверено на прошивке 8.

Полный код для ячейки следующим образом:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    static NSString *CellIdentifier = @"MyCell"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) { 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 
    } 

    // This is how you change the background color 
    cell.selectionStyle = UITableViewCellSelectionStyleDefault; 
    UIView *bgColorView = [[UIView alloc] init]; 
    bgColorView.backgroundColor = [UIColor redColor]; 
    [cell setSelectedBackgroundView:bgColorView]; 

    return cell; 
} 
9

для полноты: если вы создали свой собственный подкласс UITableViewCell вы можете реализовать - (Недействительный) setSelected: (BOOL), выбранный анимированный: (BOOL) анимированный метод и установите цвет фона некоторого вида, добавленного в представление содержимого. (Если это имеет место) или самого contentView (если она не покрыта одним из ваших собственных взглядов.

- (void)setSelected:(BOOL)selected animated:(BOOL)animated 
{ 
    if(selected) { 
     self.contentView.backgroundColor = UIColor.blueColor; 
    } else { 
     self.contentView.backgroundColor = UIColor.whiteColor; 
    } 
} 

(не использовать?чтобы соответствовать малой ширине исходного кода DIV :)

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

+0

Это работает только после того, как новый вид присваивается 'selectedBackgroundView'. В самом начале метода добавьте' self. selectedBackgroundView = [UIView new]; ' – enadun

7

В Swift, используйте это в cellForRowAtIndexPath

let selectedView = UIView() 
selectedView.backgroundColor = UIColor.white 
cell.selectedBackgroundView = selectedView 

Если вы хотите, чтобы ваш выбор цветовой быть одинаковым в каждом использовании UITableViewCell, это в AppDelegate.

let selectedView = UIView() 
selectedView.backgroundColor = UIColor.white 
UITableViewCell.appearance().selectedBackgroundView = selectedView 
2
@IBDesignable class UIDesignableTableViewCell: UITableViewCell { 
    @IBInspectable var selectedColor: UIColor = UIColor.clearColor() { 
    didSet { 
     selectedBackgroundView = UIView() 
     selectedBackgroundView?.backgroundColor = selectedColor 
    } 
    } 
} 

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

Вы можете использовать это для всех своих ячеек. Вот как выглядит ваш инспектор Attributes.

This is how your Attributes inspector will look like

+0

Очень креативный! Великий! –

0

Swift 3,0/4,0

Если вы создали свою собственную ячейку можно изменить цвет выделения на awakeFromNib() для всех клеток:

override func awakeFromNib() { 
    super.awakeFromNib() 

    let colorView = UIView() 
    colorView.backgroundColor = UIColor.orange.withAlphaComponent(0.4) 

    self.selectedBackgroundView = colorView 


}