Gostaria de personalizar o plano de fundo (e talvez também a borda) de todos os UITableViewCells dentro do meu UITableView. Até agora não consegui personalizar esse material, por isso tenho várias células de fundo branco, que é o padrão.
Existe uma maneira de fazer isso com o iPhone SDK?
UITableViewCellAccessoryCheckmark
, por exemplo? Obrigado.cell.textLabel.backgroundColor = [UIColor clearColor];
Aqui está a maneira mais eficiente que me deparei para resolver esse problema, use o método delegado willDisplayCell (isso também cuida da cor branca do plano de fundo do rótulo de texto ao usar cell.textLabel.text e / ou cell.detailTextLabel.text ):
Quando esse método delegado é chamado, a cor da célula é controlada pela célula, e não pela exibição da tabela, como quando você usa:
Portanto, no corpo do método delegado da célula, adicione o código a seguir para alternar cores das células ou use a chamada de função para tornar todas as células da tabela da mesma cor.
Esta solução funcionou bem na minha circunstância ...
fonte
cell.backgroundColor = UIColor.clearColor
Isso é realmente simples, pois o OS 3.0 apenas define a cor de fundo da célula no método willDisplayCell. Você não deve definir a cor no cellForRowAtIndexPath.
Isso funciona para os estilos simples e agrupado:
Código:
PS: Aqui o extrato da documentação para willDisplayCell:
Encontrei esta informação neste post da colionel . Agradecê-lo!
fonte
A melhor abordagem que encontrei até agora é definir uma exibição em segundo plano da célula e limpar o segundo plano das subvisões de célula. Obviamente, isso fica bem em tabelas com estilo indexado apenas, não importa com ou sem acessórios.
Aqui está uma amostra em que o fundo da célula está amarelo ofegante:
fonte
Basta colocar isso no seu arquivo de classe de delegação UITableView (.m):
fonte
Concordo com o Seba, tentei definir minha cor de linha alternada no método delegado rowForIndexPath, mas estava obtendo resultados inconsistentes entre 3,2 e 4,2. O seguinte funcionou muito bem para mim.
fonte
Depois de experimentar todas as soluções diferentes, o método a seguir é o mais elegante. Mude a cor no seguinte método delegado:
fonte
O vlado.grigorov tem alguns bons conselhos - a melhor maneira é criar um backgroundView e dar a ela uma cor, definindo todo o resto para o clearColor. Além disso, acho que dessa maneira é a única maneira de limpar a cor corretamente (tente a amostra - mas defina 'clearColor' em vez de 'yellowColor'), que é o que eu estava tentando fazer.
fonte
A personalização do plano de fundo de uma célula de exibição de tabela acaba se tornando uma abordagem "tudo ou nada". É muito difícil alterar a cor ou a imagem usada no plano de fundo de uma célula de conteúdo de uma maneira que não pareça estranha.
O motivo é que a célula realmente abrange a largura da visualização. Os cantos arredondados são apenas parte de seu estilo de desenho e a exibição de conteúdo fica nessa área.
Se você alterar a cor da célula de conteúdo, os bits brancos ficarão visíveis nos cantos. Se você alterar a cor da célula inteira, terá um bloco de cores que mede a largura da visualização.
Definitivamente, você pode personalizar uma célula, mas não é tão fácil quanto você imagina a princípio.
fonte
Crie uma visualização e defina-a como visualização em segundo plano da célula
fonte
Para estender a resposta de N.Berendt - Se você deseja definir a cor da célula com base em algum estado no objeto de dados da célula, no momento você está configurando o restante das informações para a célula da tabela, que normalmente ocorre quando você está no cellForRowAtIndexPath, você pode fazer isso substituindo o método willDisplayCell para definir a cor de plano de fundo da célula na cor de plano de fundo da exibição de conteúdo - isso evita que o problema dos planos de fundo do botão de divulgação, etc. não esteja certo, mas ainda permita controlar a cor no método cellForRowAtIndexPath onde você está fazendo toda a sua outra personalização de célula.
Portanto: se você adicionar este método ao seu delegado de exibição de tabela:
Em seu método cellForRowAtIndexPath, você pode fazer:
Isso evita a necessidade de recuperar seus objetos de dados novamente no método willDisplayCell e também economiza dois locais onde você faz a alfaiataria / customização da célula da tabela - toda a customização pode ser feita no método cellForRowAtIndexPath.
fonte
Crie uma imagem para usar como plano de fundo com o Photoshop ou gimp e chame-a de minha imagem. Em seguida, adicione este método à sua classe tableViewController:
Isso funcionará também se você tiver definido o UITableView como personalizado no inspetor de atributos.
fonte
Minha solução é adicionar o seguinte código ao evento cellForRowAtIndexPath:
Funciona sob quaisquer circunstâncias, mesmo com botões de divulgação, e é melhor para sua lógica atuar no estado de cor das células no cellForRowAtIndexPath do que no evento cellWillShow que eu acho.
fonte
Subclasse UITableViewCell e adicione isso na implementação:
fonte
fonte
Isso funcionará no último Xcode.
fonte
Tente o seguinte:
fonte