Мне интересно, как изменить синий цвет выделения / выделения 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;
UITableViewCell
selectedBackgroundView
, 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
}