Как изменить синий цвет подсветки UITableViewCell?
Мне интересно, как изменить синий цвет выделения/выбора UITableViewCell
, любые идеи?
Ответы
Ответ 1
Вы можете изменить цвет выделения несколькими способами.
-
Измените свойство selectionStyle вашей ячейки. Если вы измените его на UITableViewCellSelectionStyleGray
, он будет серым.
-
Измените свойство selectedBackgroundView
. Фактически, что создает синий градиент, это вид. Вы можете создать представление и нарисовать все, что захотите, и использовать представление в качестве фона ячеек представления таблицы.
Ответ 2
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.
Ответ 3
UITableViewCell
имеет три стиля выбора по умолчанию: -
Реализация выполняется следующим образом: -
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *) indexPath {
[cell setSelectionStyle:UITableViewCellSelectionStyleNone];
}
Ответ 4
Если вы хотите изменить его в широком приложении, вы можете добавить логику в свой делегат приложения
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
}
Ответ 5
В Swift используйте это в cellForRowAtIndexPath
let selectedView = UIView()
selectedView.backgroundColor = .white
cell.selectedBackgroundView = selectedView
Если вы хотите, чтобы ваш цвет выделения был одинаковым во всех UITableViewCell
, используйте это в AppDelegate
.
let selectedView = UIView()
selectedView.backgroundColor = .white
UITableViewCell.appearance().selectedBackgroundView = selectedView
Ответ 6
для полноты: если вы создали свой собственный подкласс 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, он использует меньше памяти и немного меньше ресурсов процессора, но вы даже не заметите, если не отобразите сотни ячеек.
Ответ 7
Мне нужно установить стиль выделения 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;
}
Ответ 8
Swift 3.0/4.0
Если вы создали свою собственную ячейку, вы можете изменить цвет выделения на awakeFromNib()
для всех ячеек:
override func awakeFromNib() {
super.awakeFromNib()
let colorView = UIView()
colorView.backgroundColor = UIColor.orange.withAlphaComponent(0.4)
self.selectedBackgroundView = colorView
}
Ответ 9
@IBDesignable class UIDesignableTableViewCell: UITableViewCell {
@IBInspectable var selectedColor: UIColor = UIColor.clearColor() {
didSet {
selectedBackgroundView = UIView()
selectedBackgroundView?.backgroundColor = selectedColor
}
}
}
В своем раскадровке установите класс вашего UITableViewCell в UIDesignableTableViewCell, в инспекторе атрибутов, вы можете изменить выбранный цвет вашей ячейки на любой цвет.
Вы можете использовать это для всех своих ячеек.
Вот как выглядит ваш инспектор Attributes.
![Вот как ваш инспектор Attributes будет выглядеть так:></a></p></div></body></html>]()
Ответ 10
Основываясь на ответе @user, вы можете просто добавить это расширение в любом месте кода своего приложения и выбрать цвет непосредственно в редакторе раскадровки для каждой ячейки своего приложения:
@IBDesignable extension UITableViewCell {
@IBInspectable var selectedColor: UIColor? {
set {
if let color = newValue {
selectedBackgroundView = UIView()
selectedBackgroundView!.backgroundColor = color
} else {
selectedBackgroundView = nil
}
}
get {
return selectedBackgroundView?.backgroundColor
}
}
}
![UITableViewCell selection color in storyboard]()