Me pregunto cómo cambiar el color azul de resaltado / selección de a UITableViewCell
, ¿alguna idea?
Me pregunto cómo cambiar el color azul de resaltado / selección de a UITableViewCell
, ¿alguna idea?
Respuestas:
Puede cambiar el color de resaltado de varias maneras.
Cambie la propiedad selectionStyle de su celda. Si lo cambia a UITableViewCellSelectionStyleGray
, será gris.
Cambiar la selectedBackgroundView
propiedad En realidad, lo que crea el degradado azul es una vista. Puede crear una vista y dibujar lo que quiera, y usar la vista como fondo de las celdas de la vista de tabla.
selectedBackgroundView
simplemente nunca aparecerá. Solo después de establecer "Selección" en Predeterminado, se selectedBackgroundView
muestra. Probado en iOS 6 y 7.
cell.selectedBackgroundView = [UIView new];
y establece el color que desee:cell.selectedBackgroundView.backgroundColor = [UIColor colorWithHex:@"ecf2f5" andAlpha:1];
Zonble ya ha proporcionado una excelente respuesta. Pensé que podría ser útil incluir un fragmento de código corto para agregar un elemento UIView
a la celda de la vista de tabla que se presentará como la vista de fondo seleccionada.
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
para que sea la UIView
que creé con el color de fondo elegidoEsto funcionó bien para mí. Gracias por el consejo Zonble.
UITableViewCell
tiene tres estilos de selección predeterminados: -
La implementación es la siguiente:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *) indexPath {
[cell setSelectionStyle:UITableViewCellSelectionStyleNone];
}
En Swift, usa esto en cellForRowAtIndexPath
let selectedView = UIView()
selectedView.backgroundColor = .white
cell.selectedBackgroundView = selectedView
Si desea que su color de selección sea el mismo en todos UITableViewCell
, use esto en AppDelegate
.
let selectedView = UIView()
selectedView.backgroundColor = .white
UITableViewCell.appearance().selectedBackgroundView = selectedView
Si desea cambiarlo en toda la aplicación, puede agregar la lógica a su delegado de aplicaciones
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
}
para completar: si creó su propia subclase UITableViewCell
, puede implementar el - (void)setSelected:(BOOL)selected animated:(BOOL)animated
método y establecer el color de fondo de alguna vista que agregó en la vista de contenido. (si ese es el caso) o de contentView en sí (si no está cubierto por una de sus propias vistas.
- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
if(selected) {
self.contentView.backgroundColor = UIColor.blueColor;
} else {
self.contentView.backgroundColor = UIColor.whiteColor;
}
}
(¿no usó? para ajustarse al pequeño ancho del código fuente DIV's :)
Este enfoque tiene dos ventajas sobre el uso de SelectedBackgroundView, usa menos memoria y un poco menos de CPU, algo que ni siquiera notarías a menos que muestres cientos de celdas.
selectedBackgroundView
Al principio del método addself. selectedBackgroundView = [UIView new];
selectedBackgroundView
propiedad.
Tengo que establecer el estilo de selección UITableViewCellSelectionStyleDefault
para que funcione el color de fondo personalizado. Si hay otro estilo, se ignorará el color de fondo personalizado. Probado en iOS 8.
El código completo para la celda de la siguiente manera:
- (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;
}
Según la respuesta de @ user , puede agregar esta extensión en cualquier parte del código de su aplicación y tener su color de selección directamente en el editor de guiones gráficos para cada celda de su aplicación:
@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
}
}
}
En su guión gráfico, establezca la clase de su UITableViewCell en UIDesignableTableViewCell, en el inspector de atributos, puede cambiar el color seleccionado de su celda a cualquier color.
Puede usar esto para todas sus células. Así será su inspector de atributos.
UIColor.clear
, no UIColor.clearColor()
. No estoy seguro si eso también es un cambio en Swift, pero también funciona sin él @IBDesignable
.
Swift 3.0 / 4.0
Si ha creado su propia celda personalizada, puede cambiar el color de selección awakeFromNib()
para todas las celdas:
override func awakeFromNib() {
super.awakeFromNib()
let colorView = UIView()
colorView.backgroundColor = UIColor.orange.withAlphaComponent(0.4)
self.selectedBackgroundView = colorView
}