Мне интересно, как изменить синий цвет выделения / выделения UITableViewCell, есть идеи?
Мне интересно, как изменить синий цвет выделения / выделения UITableViewCell, есть идеи?
Ответы:
Вы можете изменить цвет выделения несколькими способами.
Измените свойство selectionStyle вашей ячейки. Если вы измените его на UITableViewCellSelectionStyleGray, он будет серым.
Измените selectedBackgroundViewсвойство. На самом деле то, что создает синий градиент, - это вид. Вы можете создавать представление и рисовать что угодно, а также использовать представление в качестве фона для ячеек представления таблицы.
selectedBackgroundViewчто тогда он просто никогда не появится. Только после установки "Выбор" по умолчанию, selectedBackgroundViewпоявится. Протестировано на iOS 6 и 7.
cell.selectedBackgroundView = [UIView new];и вы устанавливаете любой цвет, который хотите:cell.selectedBackgroundView.backgroundColor = [UIColor colorWithHex:@"ecf2f5" andAlpha:1];
Zonble уже дал отличный ответ. Я подумал, что может быть полезно включить короткий фрагмент кода для добавления UIViewв ячейку табличного представления, которая будет отображаться в качестве выбранного фонового представления.
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;
UITableViewCellselectedBackgroundView, UIViewкоторую я создал с выбранным мной цветом фона.Это хорошо сработало для меня. Спасибо Zonble за подсказку.
UITableViewCell имеет три стиля выбора по умолчанию: -
Реализация выглядит следующим образом: -
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *) indexPath {
[cell setSelectionStyle:UITableViewCellSelectionStyleNone];
}
В Swift используйте это в cellForRowAtIndexPath
let selectedView = UIView()
selectedView.backgroundColor = .white
cell.selectedBackgroundView = selectedView
Если вы хотите, чтобы цвет выделения был одинаковым во всех UITableViewCell, используйте это в AppDelegate.
let selectedView = UIView()
selectedView.backgroundColor = .white
UITableViewCell.appearance().selectedBackgroundView = selectedView
Если вы хотите изменить его в масштабе всего приложения, вы можете добавить логику в свой делегат приложения.
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
}
для полноты: если вы создали свой собственный подкласс, 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: он использует меньше памяти и немного меньше ЦП, чего вы даже не заметили бы, если бы не отображали сотни ячеек.
selectedBackgroundView самом начале метода addself. selectedBackgroundView = [UIView new];
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;
}
Основываясь на ответе @ 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
}
}
}
@IBDesignable class UIDesignableTableViewCell: UITableViewCell {
@IBInspectable var selectedColor: UIColor = UIColor.clearColor() {
didSet {
selectedBackgroundView = UIView()
selectedBackgroundView?.backgroundColor = selectedColor
}
}
}
В раскадровке установите для класса UITableViewCell значение UIDesignableTableViewCell, в инспекторе атрибутов вы можете изменить выбранный цвет ячейки на любой цвет.
Вы можете использовать это для всех своих ячеек. Так будет выглядеть ваш инспектор атрибутов.
UIColor.clear, нет UIColor.clearColor(). Не уверен, что это изменение и в Swift, но оно работает и без него @IBDesignable.
Swift 3.0 / 4.0
Если вы создали свою собственную ячейку, вы можете изменить цвет выделения awakeFromNib()для всех ячеек:
override func awakeFromNib() {
super.awakeFromNib()
let colorView = UIView()
colorView.backgroundColor = UIColor.orange.withAlphaComponent(0.4)
self.selectedBackgroundView = colorView
}