Eu quero personalizar o UITableView
cabeçalho para cada seção. Até agora, eu implementei
-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
este UITabelViewDelegate
método. O que eu quero fazer é obter o cabeçalho atual para cada seção e apenas adicionar UILabel
como uma subvisão.
Até agora, não sou capaz de fazer isso. Porque não consegui encontrar nada para obter o cabeçalho da seção padrão. Primeira pergunta, existe alguma maneira de obter o cabeçalho da seção padrão ?
Se não for possível, preciso criar uma exibição de contêiner UIView
, mas, desta vez, preciso definir a cor de plano de fundo padrão, a cor da sombra etc. Porque, se você observar atentamente o cabeçalho da seção, ele já estará personalizado.
Como posso obter esses valores padrão para cada cabeçalho de seção?
Obrigado a todos.
ios
objective-c
swift
uitableview
limão
fonte
fonte
tableView:titleForHeaderInSection:
?NSString
, eu preciso definir personalizado fonte para que, eu não posso se eu usartableView:titleForHeaderInSection:
Respostas:
Você pode tentar isso:
fonte
A resposta selecionada usando
tableView :viewForHeaderInSection:
está correta.Apenas para compartilhar uma dica aqui.
Se você estiver usando o storyboard / xib, poderá criar outra célula protótipo e usá-la na sua "célula de seção". O código para configurar o cabeçalho é semelhante ao modo como você configura para células de linha.
fonte
viewForHeaderInSection
não está usandocanEditRowAtIndexPath
como você mencionou. Nunca verifiquei a falha que você disse, mas você poderia esclarecer como uma pressão prolongada causará uma falha?UITableViewCell
como uma visualização de cabeçalho. É muito difícil depurar falhas visuais - o cabeçalho às vezes desaparece por causa de como as células são desenfileiradas e você estará procurando por horas por que isso até que você percebaUITableViewCell
que não pertence a eleUITableView
cabeçalho.UITableViewCell
como cabeçalho está simplesmente errado.Versão rápida da resposta de Lochana Tejas :
fonte
override
palavra-chave é redundante. Além disso, considere reutilizar as visualizações de cabeçalho em vez de recriá-las.Se você usar a visualização de cabeçalho padrão, poderá alterar apenas o texto com
Para Swift:
Se você quiser personalizar a visualização, precisará criar uma nova.
fonte
por que não usar UITableViewHeaderFooterView ?
fonte
Se headerInSection não for exibido, tente isso.
Isso retorna uma altura para o cabeçalho de uma determinada seção.
fonte
Swift 3 versão de lochana e estemendoza respostas:
Além disso, saiba que você TAMBÉM precisa implementar:
fonte
Tente isso ......
fonte
As outras respostas fazem um bom trabalho de recriar a exibição de cabeçalho padrão, mas na verdade não respondem à sua pergunta principal:
Existe uma maneira - basta implementar
tableView:willDisplayHeaderView:forSection:
em seu delegado. A visualização padrão do cabeçalho será passada para o segundo parâmetro e, a partir daí, você poderá convertê-la emUITableViewHeaderFooterView
ae, em seguida, adicionar / alterar subvisões conforme desejar.Obj-C
Rápido
fonte
view
.fonte
Esta é a solução mais fácil possível. O código a seguir pode ser usado diretamente para criar um cabeçalho de seção personalizado.
NOTA: SectionHeaderTableViewCell é um UITableViewCell personalizado criado no Storyboard.
fonte
Se eu fosse você, criaria um método que retornaria uma UIView que um NSString contivesse. Por exemplo
Na implementação desse método, crie um UIView, adicione um UILabel a ele com as propriedades que você deseja definir e, é claro, defina seu título para o especificado.
fonte
A solução de @ samwize no Swift (então vote nele!). Brilhante usando o mesmo mecanismo de reciclagem também para seções de cabeçalho / rodapé:
fonte
Se você quiser alterar a fonte do textLabel no cabeçalho da seção, faça isso no willDisplayHeaderView. Para definir o texto, você pode fazê-lo em viewForHeaderInSection ou titleForHeaderInSection. Boa sorte!
fonte
Exemplo completo de 2019 para copiar e colar
Primeiro set "Agrupado" no storyboard: tem que acontecer no momento do init, você não pode configurá-lo mais tarde, por isso é mais fácil lembrar de fazê-lo no storyboard:
Próximo,
É necessário implementar heightForHeaderInSection devido a um erro da Apple.
Ainda existe um bug da Apple - há dez anos - em que ele simplesmente não mostra o primeiro cabeçalho (ou seja, índice 0) se você não tiver
heightForHeaderInSection
chamada.Então,
tableView.sectionHeaderHeight = 70
simplesmente não funciona, está quebrado .Definir um quadro não alcança nada:
Em
viewForHeaderInSection
simplesmente criar um UIView ().Não faz sentido / não consegue nada se você UIView (quadro ...) já que o iOS simplesmente define o tamanho da exibição, conforme determinado pela tabela.
Portanto, a primeira linha de
viewForHeaderInSection
será simpleslet view = UIView()
e essa é a visão que você retorna.É isso aí - qualquer outra coisa é uma perda de tempo.
Outra questão "exigente" da Apple.
A extensão de conveniência usada acima é:
fonte
Adicione magicamente o cabeçalho do Table View rapidamente
Recentemente eu tentei isso.
Eu precisava de um e apenas um cabeçalho em todo o UITableView.
Como eu queria um UIImageView na parte superior do TableView. Então, adicionei um UIImageView na parte superior do UITableViewCell e ele foi automaticamente adicionado como tableViewHeader. Agora, conecto o ImageView ao ViewController e adiciono a imagem.
Fiquei confuso porque fiz algo assim pela primeira vez. Então, para esclarecer minha confusão, abra o formato xml do MainStoryBoard e localizei o Image View como um cabeçalho.
Funcionou para mim. Obrigado xCode e rápido.
fonte
chame esse método delegado
isso permitirá adicionar automaticamente um cabeçalho padrão com título dinâmico.
Você pode usar cabeçalho / rodapé reutilizável e personalizável.
https://github.com/sourov2008/UITableViewCustomHeaderFooterSection
fonte
swif 4.2
fonte
além de titleForHeaderInSection, você pode simplesmente alterar a exibição do cabeçalho, rodapé. verifique meu comentário aqui: Altere a seção UITable backgroundColor sem perder a seção Title
fonte
Se você quiser apenas adicionar um título ao cabeçalho tableView, não adicione uma visualização. No swift 3.x, o código é assim:
Você pode implementar uma matriz para buscar o título para os cabeçalhos.
fonte
Voltando à pergunta original (4 anos depois), em vez de reconstruir seu próprio cabeçalho de seção, o iOS pode simplesmente ligar para você (com willDisplayHeaderView: forSection :) logo após criar o padrão. Por exemplo, eu queria adicionar um botão de gráfico na borda direita do cabeçalho da seção:
fonte
Usar
tableView: willDisplayHeaderView:
para personalizar a exibição quando ela estiver prestes a ser exibida.Isso oferece a vantagem de poder aproveitar e ampliar a visualização que já foi criada para a visualização do cabeçalho, em vez de ter de recriar a visualização inteira do cabeçalho.
Aqui está um exemplo que colore a seção do cabeçalho com base em um BOOL e inclua um elemento de texto detalhado no cabeçalho.
fonte
Swift 4.2
No Swift 4.2, o nome da tabela é um pouco alterado.
fonte