Eu estou querendo saber como alterar a cor do realce / seleção azul de a UITableViewCell
, alguma idéia?
Eu estou querendo saber como alterar a cor do realce / seleção azul de a UITableViewCell
, alguma idéia?
Respostas:
Você pode alterar a cor de destaque de várias maneiras.
Altere a propriedade selectionStyle do seu celular. Se você mudar para UITableViewCellSelectionStyleGray
, ficará cinza.
Mude a selectedBackgroundView
propriedade. Na verdade, o que cria o gradiente azul é uma visualização. Você pode criar uma visualização e desenhar o que quiser e usar a visualização como plano de fundo das células da visualização da tabela.
selectedBackgroundView
simplesmente nunca aparecerá. Somente após definir "Seleção" como Padrão, a selectedBackgroundView
exibição será exibida. Testado em iOS 6 e 7.
cell.selectedBackgroundView = [UIView new];
e você definir qualquer cor que você quiser:cell.selectedBackgroundView.backgroundColor = [UIColor colorWithHex:@"ecf2f5" andAlpha:1];
O Zonble já forneceu uma excelente resposta. Eu pensei que seria útil incluir um trecho de código curto para adicionar um UIView
à célula de tableview que será apresentada como a exibição de plano de fundo selecionada.
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
como a UIView
que eu criei com a cor de fundo escolhidaIsto funcionou bem para mim. Obrigado pela dica Zonble.
UITableViewCell
possui três estilos de seleção padrão: -
A implementação é a seguinte: -
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *) indexPath {
[cell setSelectionStyle:UITableViewCellSelectionStyleNone];
}
No Swift, use isso em cellForRowAtIndexPath
let selectedView = UIView()
selectedView.backgroundColor = .white
cell.selectedBackgroundView = selectedView
Se você quer sua cor de seleção ser o mesmo em todos os UITableViewCell
, usar isso em AppDelegate
.
let selectedView = UIView()
selectedView.backgroundColor = .white
UITableViewCell.appearance().selectedBackgroundView = selectedView
Se você quiser alterá-lo para todo o aplicativo, adicione a lógica ao seu Delegado de Aplicativo
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: se você criou sua própria subclasse, UITableViewCell
pode implementar o - (void)setSelected:(BOOL)selected animated:(BOOL)animated
método e definir a cor de segundo plano de alguma visualização que você adicionou na visualização de conteúdo. (se for esse o caso) ou do próprio contentView (se não for coberto por uma de suas próprias visualizações).
- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
if(selected) {
self.contentView.backgroundColor = UIColor.blueColor;
} else {
self.contentView.backgroundColor = UIColor.whiteColor;
}
}
(não usou? para ajustar-se à pequena largura dos DIVs do código-fonte :)
essa abordagem tem duas vantagens em relação ao uso do selectedBackgroundView, usa menos memória e um pouco menos de CPU, não que você notaria a menos que exibisse centenas de células.
selectedBackgroundView
addself. selectedBackgroundView = [UIView new];
selectedBackgroundView
propriedade.
Preciso definir o estilo de seleção para que UITableViewCellSelectionStyleDefault
a cor de plano de fundo personalizada funcione. Se houver outro estilo, a cor de plano de fundo personalizada será ignorada. Testado no iOS 8.
O código completo da célula da seguinte maneira:
- (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;
}
Com base na resposta do usuário @ , você pode adicionar esta extensão em qualquer lugar no código do seu aplicativo e ter a cor da sua seleção diretamente no editor de storyboard para todas as células do seu aplicativo:
@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
}
}
}
No seu storyboard, defina a classe do seu UITableViewCell como UIDesignableTableViewCell, no inspetor Atributos, você pode alterar a cor selecionada da sua célula para qualquer cor.
Você pode usar isso para todas as suas células. É assim que o inspetor de atributos será exibido.
UIColor.clear
, não UIColor.clearColor()
. Não tenho certeza se isso também é uma mudança no Swift, mas também funciona sem ele @IBDesignable
.
Swift 3.0 / 4.0
Se você criou sua própria célula personalizada, é possível alterar a cor da seleção awakeFromNib()
para todas as células:
override func awakeFromNib() {
super.awakeFromNib()
let colorView = UIView()
colorView.backgroundColor = UIColor.orange.withAlphaComponent(0.4)
self.selectedBackgroundView = colorView
}