Eu sei que essa pergunta foi para o iOS 5, mas para o benefício de futuros leitores, observe que o iOS 6 eficaz agora podemos usar em dequeueReusableHeaderFooterViewWithIdentifier
vez de dequeueReusableCellWithIdentifier
.
Então viewDidLoad
, ligue para registerNib:forHeaderFooterViewReuseIdentifier:
ou registerClass:forHeaderFooterViewReuseIdentifier:
. Então viewForHeaderInSection
, ligue tableView:dequeueReusableHeaderFooterViewWithIdentifier:
. Você não usa um protótipo de célula com essa API (é uma visão baseada em NIB ou uma visão criada programaticamente), mas essa é a nova API para cabeçalhos e rodapés desenfileirados.
Basta usar uma célula protótipo como cabeçalho e / ou rodapé da seção.
tableView:viewForHeaderInSection:
método ou otableView:viewForFooterInSection:
método[tableView dequeueReusableCellWithIdentifier:]
para obter o cabeçalhotableView:heightForHeaderInSection:
métodoEditar: Como alterar o título do cabeçalho (pergunta comentada):
tableView:viewForHeaderInSection:
método, obtenha o rótulo chamando:fonte
viewForHeaderInSection
método (não é necessário adicionar UIViews personalizados).dequeueReusableHeaderFooterViewWithIdentifier
é apresentado e agora é preferido em relação a esta resposta. Mas usar isso corretamente agora leva mais etapas. Tenho guide @ samwize.com/2015/11/06/… .UITableViewCell
como uma visualização de cabeçalho. Você terá muita dificuldade em depurar falhas visuais - o cabeçalho às vezes desaparecerá devido à maneira como as células são desenfileiradas e você estará procurando por horas por que isso ocorre até que você percebaUITableViewCell
que não pertence aoUITableView
cabeçalho.No iOS 6.0 e superior, as coisas mudaram com a nova
dequeueReusableHeaderFooterViewWithIdentifier
API.Escrevi um guia (testado no iOS 9), que pode ser resumido da seguinte forma:
UITableViewHeaderFooterView
viewDidLoad
viewForHeaderInSection
e usardequeueReusableHeaderFooterViewWithIdentifier
para recuperar o cabeçalho / rodapéfonte
Eu consegui trabalhar no iOS7 usando uma célula protótipo no storyboard. Eu tenho um botão na visualização de cabeçalho de seção personalizada que aciona uma sequência configurada no storyboard.
Comece com a solução do Tieme
Como aponta pedro.m, o problema é que tocar no cabeçalho da seção faz com que a primeira célula da seção seja selecionada.
Como Paul Von aponta, isso é corrigido retornando o contentView da célula em vez da célula inteira.
No entanto, como Hons aponta, uma pressão longa no cabeçalho da seção travará o aplicativo.
A solução é remover qualquer gestor de reconhecimento do contentView.
Se você não estiver usando gestos nas visualizações do cabeçalho da seção, esse pequeno truque parece ser feito.
fonte
Se você usa storyboards, pode usar uma célula protótipo na tableview para fazer o layout da visualização do cabeçalho. Defina um ID exclusivo e viewForHeaderInSection. Você pode desenfileirar a célula com esse ID e convertê-lo em um UIView.
fonte
Se você precisar de uma implementação rápida, siga as instruções na resposta aceita e, em seguida, no UITableViewController, implemente os seguintes métodos:
fonte
A solução que eu criei é basicamente a mesma solução usada antes da introdução dos storyboards.
Crie um novo arquivo de classe de interface vazio. Arraste um UIView para a tela, layout conforme desejado.
Carregue a ponta manualmente, atribua à seção apropriada de cabeçalho / rodapé nos métodos delegados viewForHeaderInSection ou viewForFooterInSection.
Eu esperava que a Apple simplificasse esse cenário com storyboards e continuasse procurando uma solução melhor ou mais simples. Por exemplo, cabeçalhos e rodapés de tabelas personalizados são fáceis de adicionar.
fonte
tableView:titleForHeaderInSection
one-liner.Ao retornar o contentView da célula, você terá 2 problemas:
viewForHeaderInSection
plantão, está criando uma nova célula)Solução:
Classe de wrapper para cabeçalho da tabela \ rodapé. É apenas um recipiente, herdado de
UITableViewHeaderFooterView
, que mantém a célula dentrohttps://github.com/Magnat12/MGTableViewHeaderWrapperView.git
Registre a classe no seu UITableView (por exemplo, em viewDidLoad)
No seu UITableViewDelegate:
fonte
Eu costumava fazer o seguinte para criar vistas de cabeçalho / rodapé preguiçosamente:
[NSNull null]
fonte
Eu estive com problemas em um cenário em que o Header nunca foi reutilizado, mesmo executando todas as etapas adequadas.
Portanto, como uma dica para todos que desejam alcançar a situação de mostrar seções vazias (0 linhas), lembre-se de que:
dequeueReusableHeaderFooterViewWithIdentifier não reutilizará o cabeçalho até você retornar pelo menos uma linha
Espero que ajude
fonte
Para acompanhar a sugestão de Damon , aqui está como tornei o cabeçalho selecionável como uma linha normal com um indicador de divulgação.
Adicionei um botão subclassificado de UIButton (nome da subclasse "ButtonWithArgument") à célula protótipo do cabeçalho e excluí o texto do título (o texto em negrito "Título" é outro UILabel na célula protótipo)
em seguida, defina o botão para a visualização inteira do cabeçalho e adicione um indicador de divulgação com o truque de Avario
ButtonWithArgument.h
ButtonWithArgument.m
fonte
Você deve usar a solução do Tieme como base, mas esqueça o
viewWithTag:
abordagens suspeitas e outras, em vez disso, tente recarregar o cabeçalho (recarregando essa seção).Então, depois de exibir sua visualização de cabeçalho de célula personalizada com todas as
AutoLayout
coisas sofisticadas , basta desenfileirá-la e retornar o contentView após a configuração, como:fonte
Que tal uma solução em que o cabeçalho é baseado em uma matriz de exibição:
Em seguida no delegado:
fonte
Adicione célula
StoryBoard
e definareuseidentified
Código
e
Usar:
fonte
Semelhante à resposta laszlo, mas você pode reutilizar a mesma célula protótipo para as células da tabela e a célula do cabeçalho da seção. Adicione as duas primeiras funções abaixo à sua subclasse UIViewController
fonte
Aqui está a resposta de @Vitaliy Gozhenko , em Swift.
Para resumir, você criará um UITableViewHeaderFooterView que contém um UITableViewCell. Este UITableViewCell será "dequeuable" e você poderá projetá-lo em seu storyboard.
Crie uma classe UITableViewHeaderFooterView
Conecte seu tableview com esta classe na sua função viewDidLoad:
Ao solicitar um cabeçalho de seção, desenfileire um CustomHeaderFooterView e insira uma célula nele
fonte