Gostaria de personalizar o plano de fundo e a cor da borda de um UITableView de estilo agrupado.
Pude personalizar a cor de fundo usando o seguinte:
tableView.contentView.backgroundColor = [UIColor greenColor];
Mas a cor da borda ainda é algo que não sei como mudar.
Como faço para personalizar esses dois aspectos da exibição de tabela de estilo agrupado?
Respostas:
ATUALIZAÇÃO: No iPhone OS 3.0 e posterior
UITableViewCell
agora tem umabackgroundColor
propriedade que torna isso realmente fácil (especialmente em combinação com o[UIColor colorWithPatternImage:]
inicializador). Mas vou deixar a versão 2.0 da resposta aqui para quem precisa ...É mais difícil do que realmente deveria ser. Veja como eu fiz isso quando tive que fazer:
Você precisa definir a propriedade backgroundView do UITableViewCell para um UIView personalizado que desenhe a borda e o próprio fundo nas cores apropriadas. Esta visualização deve ser capaz de desenhar as bordas em 4 modos diferentes, arredondado na parte superior para a primeira célula em uma seção, arredondado na parte inferior para a última célula em uma seção, sem cantos arredondados para células no meio de uma seção , e arredondado nos 4 cantos para seções que contêm uma célula.
Infelizmente, não consegui descobrir como definir esse modo automaticamente, então tive que configurá-lo no método -cellForRowAtIndexPath do UITableViewDataSource.
É um verdadeiro PITA, mas confirmei com os engenheiros da Apple que atualmente é o único jeito.
Atualização Aqui está o código para essa visualização de base personalizada. Há um bug de desenho que faz com que os cantos arredondados pareçam um pouco engraçados, mas mudamos para um design diferente e descartamos os fundos personalizados antes que eu tivesse a chance de corrigi-los. Ainda assim, isso provavelmente será muito útil para você:
fonte
Sei que as respostas estão relacionadas à alteração das células agrupadas da tabela, mas caso alguém queira alterar também a cor de fundo do tableview:
Você não só precisa definir:
Você também precisa alterar ou eliminar a visualização do plano de fundo:
fonte
Em primeiro lugar, obrigado por este código. Eu fiz algumas alterações de desenho nesta função para remover o problema de canto do desenho.
fonte
Obrigado pelo código, é exatamente o que eu estava procurando. Eu também adicionei o seguinte código ao código do Vimal, para implementar o caso de uma célula CustomCellBackgroundViewPositionSingle. (Todos os quatro cantos são arredondados.)
fonte
Uma coisa que encontrei com o código CustomCellBackgroundView acima de Mike Akers que pode ser útil para outros:
cell.backgroundView
não é redesenhado automaticamente quando as células são reutilizadas, e as alterações na posição var do backgroundView não afetam as células reutilizadas. Isso significa que as mesas longas terão empatado incorretamentecell.backgroundViews
devido às suas posições.Para corrigir isso sem ter que criar um novo backgroundView toda vez que uma linha for exibida, chame
[cell.backgroundView setNeedsDisplay]
no final de seu-[UITableViewController tableView:cellForRowAtIndexPath:]
. Ou para uma solução mais reutilizável, substitua o configurador de posição de CustomCellBackgroundView para incluir a[self setNeedsDisplay]
.fonte
Obrigado por esta postagem super útil. Caso alguém por aí (como eu!) Queira apenas ter um fundo de célula completamente vazio em vez de personalizá-lo através de imagens / texto / outro conteúdo em IB e não consiga descobrir como diabos se livrar da borda / preenchimento / plano de fundo, mesmo que você defina como claro no IB ... aqui está o código que usei para fazer o truque!
Espero que isso ajude mais alguém! Parece funcionar como um encanto.
fonte
cell.backgroundView
.Muito obrigado a todos que postaram seu código. Isso é muito útil.
Eu deduzi uma solução semelhante para alterar a cor de realce para células de visualização de tabela agrupadas. Basicamente, o selectedBackgroundView do UITableViewCell (não o backgroundView). Que mesmo no iPhone OS 3.0 ainda precisa desta solução PITA, pelo que eu posso dizer ...
O código abaixo tem as alterações para renderizar o destaque com um gradiente em vez de uma cor sólida. Além disso, a renderização da borda é removida. Aproveitar.
fonte
Você pode personalizar a cor da borda definindo
fonte
Para alterar a cor da borda da visualização da tabela:
In.h:
Em .m:
fonte
Esta tarefa pode ser facilmente realizada usando PrettyKit adicionando cerca de 5 linhas de código. Se você usa
nib
arquivos oustoryboard
, também não se esqueça de aplicar este pequeno hack . Ao usar essa abordagem, você deve criar uma subclasse de sua célula dePrettyTableViewCell
:Este é um exemplo do meu
cellForRowAtIndexPath
:fonte
Tenho tido problemas com isso e tentei muitas combinações de coisas, pois notei que para algumas células funcionava bem, mas não para outras.
Estranhamente, descobri que é possível definir cell.backgroundColor para lightGrayColor e tudo funciona perfeitamente - mas blueColor me causou problemas de não atualizar as bordas externas.
A menos que seja realmente importante usar o verde - talvez você queira tentar isso. Pode ser que este seja um recurso para fazer as pessoas usarem apenas as cores cinza ao indicar que uma célula está selecionada.
fonte