Как изменить синий цвет подсветки UITableViewCell?
Мне интересно, как изменить синий цвет выделения / Выделения UITableViewCell
, есть идеи?
10 ответов:
вы можете изменить цвет подсветки несколькими способами.
измените свойство selectionStyle вашей ячейки. Если вы измените его на
UITableViewCellSelectionStyleGray
, Это будет серо.изменить
selectedBackgroundView
собственность. На самом деле то, что создает синий градиент-это вид. Вы можете создать представление и нарисовать то, что вам нравится, и использовать представление в качестве фона ячеек представления таблицы.
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.
UITableViewCell
имеет три стиля выбора по умолчанию: -
- синий
- серый
- нет
реализация выглядит следующим образом:-
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *) indexPath { [cell setSelectionStyle:UITableViewCellSelectionStyleNone]; }
Если вы хотите изменить его приложение в целом, вы можете добавить логику в делегат приложения
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 }
в Swift, используйте это в
cellForRowAtIndexPath
let selectedView = UIView() selectedView.backgroundColor = .white cell.selectedBackgroundView = selectedView
если вы хотите, чтобы ваш цвет выбора был одинаковым в каждом
UITableViewCell
, используйте это вAppDelegate
.let selectedView = UIView() selectedView.backgroundColor = .white UITableViewCell.appearance().selectedBackgroundView = selectedView
для полноты картины: если вы создали свой собственный подкласс
UITableViewCell
можно использовать тег- (void)setSelected:(BOOL)selected animated:(BOOL)animated
метод и установите цвет фона некоторого представления, добавленного в представление содержимого. (если это так) или самого contentView (если он не охвачен одним из ваших собственных представлений.- (void)setSelected:(BOOL)selected animated:(BOOL)animated { if(selected) { self.contentView.backgroundColor = UIColor.blueColor; } else { self.contentView.backgroundColor = UIColor.whiteColor; } }
(не использовать ? чтобы соответствовать небольшой ширине исходного кода DIV:)
этот подход имеет два преимущества перед использованием selectedBackgroundView, он использует меньше памяти и немного меньше Процессора, не что бы даже не заметит, если у дисплея сотни клеток.
Я должен установить стиль выбора в
UITableViewCellSelectionStyleDefault
пользовательские цвета фона для работы. Если какой-либо другой стиль, пользовательский цвет фона будет проигнорирован. Протестировано на iOS 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; }
@IBDesignable class UIDesignableTableViewCell: UITableViewCell { @IBInspectable var selectedColor: UIColor = UIColor.clearColor() { didSet { selectedBackgroundView = UIView() selectedBackgroundView?.backgroundColor = selectedColor } } }
в раскадровке установите класс вашего UITableViewCell в UIDesignableTableViewCell, в инспекторе атрибутов вы можете изменить выбранный цвет вашей ячейки на любой цвет.
вы можете использовать это для всех ваших клеток. Вот как будет выглядеть ваш инспектор атрибутов.
Swift 3.0 / 4.0
Если вы создали свою собственную ячейку, вы можете изменить цвет выделения на
awakeFromNib()
для всех клеток:override func awakeFromNib() { super.awakeFromNib() let colorView = UIView() colorView.backgroundColor = UIColor.orange.withAlphaComponent(0.4) self.selectedBackgroundView = colorView }
на основе @ ответ пользователя, вы можете просто добавить это расширение в любом месте вашего кода приложения и иметь свой цвет выбора непосредственно в Редакторе раскадровки для каждой ячейки вашего приложения:
@IBDesignable extension UITableViewCell { @IBInspectable var selectedColor: UIColor? { set { if let color = newValue { selectedBackgroundView = UIView() selectedBackgroundView!.backgroundColor = color } else { selectedBackgroundView = nil } } get { return selectedBackgroundView?.backgroundColor } } }