Мне интересно, как изменить синий цвет выделения/выбора 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
имеет три стиля выбора по умолчанию: -
- синий
- Серый
- None
Реализация выполняется следующим образом: -
- (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.
Ответ 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
}
}
}