Eu quero usar um UITableview com diferentes tableViewCells personalizadas. Minhas 3 células são as seguintes:
- Cell1: deve ter uma imagem e um rótulo.
- Cell2: deve ter dois rótulos.
- Cell3: deve ter um dayPicker.
Não quero codificar uma tag para as células. Como posso gerenciar isso no Swift. Tenho que codificar minha própria classe para cada célula? Posso usar um tableviewController? Como posso preencher dados em células diferentes?
Gostaria de gerar um tableView, como um aplicativo de contato de um dispositivo iOS.
swift
uitableview
Easyglider
fonte
fonte
Respostas:
Deixe-me começar respondendo suas perguntas primeiro.
Tenho que codificar uma classe própria para cada célula? => Sim, acredito que sim. Pelo menos, eu faria assim.
Posso usar um tableviewController? => Sim, você pode. No entanto, você também pode ter uma visão de tabela dentro de seu View Controller.
Como posso preencher dados em células diferentes? => Dependendo das condições, você pode preencher dados em células diferentes. Por exemplo, vamos supor que você deseja que suas duas primeiras linhas sejam como o primeiro tipo de células. Então, você apenas cria / reutiliza o primeiro tipo de células e define seus dados. Ficará mais claro quando eu mostrar as capturas de tela, eu acho.
Deixe-me dar um exemplo com um TableView dentro de um ViewController. Depois de entender o conceito principal, você pode tentar e modificar como quiser.
Etapa 1: Crie 3 TableViewCells personalizadas. Eu o chamei de FirstCustomTableViewCell, SecondCustomTableViewCell, ThirdCustomTableViewCell. Você deve usar nomes mais significativos.
Etapa 2: Vá para Main.storyboard e arraste e solte uma TableView dentro de seu View Controller. Agora, selecione a visualização da tabela e vá para o inspetor de identidade. Defina "Prototype Cells" como 3. Aqui, você acabou de dizer ao TableView que pode ter 3 tipos diferentes de células.
Etapa 3: Agora, selecione a 1ª célula em sua TableView e no inspetor de identidade, coloque "FirstCustomTableViewCell" no campo Classe personalizada e defina o identificador como "firstCustomCell" no inspetor de atributos.
Faça o mesmo para todos os outros - defina suas classes personalizadas como "SecondCustomTableViewCell" e "ThirdCustomTableViewCell", respectivamente. Defina também os identificadores como secondCustomCell e thirdCustomCell consecutivamente.
Etapa 4: edite as classes de células personalizadas e adicione pontos de venda de acordo com sua necessidade. Eu editei com base na sua pergunta.
PS: Você precisa colocar as saídas sob a definição de classe.
Portanto, em FirstCustomTableViewCell.swift, sob o
você colocaria seu rótulo e pontos de exibição de imagem.
e no SecondCustomTableViewCell.swift, adicione os dois rótulos como-
e o ThirdCustomTableViewCell.swift deve ser semelhante a-
Etapa 5: Em seu ViewController, crie um Outlet para seu TableView e defina a conexão do storyboard. Além disso, você precisa adicionar UITableViewDelegate e UITableViewDataSource na definição de classe como a lista de protocolo. Portanto, a definição de sua classe deve ser semelhante a
Depois disso, anexe UITableViewDelegate e UITableViewDatasource de sua visualização de tabela ao seu controlador. Neste ponto, seu viewController.swift deve ser semelhante a-
PS: Se você fosse usar um TableViewController em vez de um TableView dentro de um ViewController, você poderia pular esta etapa.
Etapa 6: arraste e solte as visualizações e rótulos da imagem em sua célula de acordo com a classe Cell. e, em seguida, fornecer conexão com seus pontos de venda do storyboard.
Etapa 7: Agora, escreva os métodos necessários do UITableViewDatasource no controlador de visualização.
fonte
Swift 3.0 + atualização com código mínimo
Conceito básico: Crie uma visualização de tabela com protótipos de células dinâmicas. Atribua um identificador e crie uma classe de célula de visualização de tabela customizada para cada protótipo de célula. Inicie e mostre células personalizadas no método de delegação da visualização de tabela.
1. Crie células no storyboard
Arraste uma tableView para seu controlador de visualização, adicione células de protótipo a ela e, em seguida, solte o elemento de interface do usuário nas células de visualização de sua tabela, adicione a restrição adequadamente, se necessário.
2. Crie
UITableViewCell
classes personalizadasAdicione o seguinte código ao seu projeto. Estou colocando logo acima da classe do controlador de exibição.
3. Atribuir classe personalizada e identificador para protótipos de células
Para cada um dos protótipos de célula no storyboard, atribua a classe personalizada criada na etapa 2 e, em seguida, insira um identificador exclusivo.
4. Conecte os elementos da IU ao código swift
Controle arraste a visualização da tabela e conecte-se à classe do controlador de visualização. Controle, arraste os elementos da IU que são adicionados aos protótipos de células na etapa 1 e conecte-se à classe de célula de visualização de tabela correspondente.
5. Adicione o código para visualizar o controlador e controlar a visualização da tabela
Faça seu controlador de visualização em conformidade com o delegado de visualização de tabela
Em
viewDidLoad
, configure o delegado e a fonte de dados do table view.Por fim, adicione dois métodos delegados para controlar a visualização da tabela, conforme o requisito mínimo.
6. Experimente :)
fonte
As respostas acima são as melhores respostas, mas existem TONELADAS de razões para obter este problema. Aqui está outra solução potencial para qualquer pessoa com este problema:
Meu problema era que eu estava seguindo para a classe ViewController e não para a visualização do storyboard. Portanto, minha referência à célula do storyboard não fazia sentido, já que o storyboard não estava sendo usado.
Eu estava fazendo isso:
E eu precisava fazer algo assim:
Espero que isso ajude alguém.
fonte
UITableViewController
está herdandoUIViewController
aquilo que já foiUITableviewDataSource
&UITableviewDelegate
mapeado em si mesmo.Você pode criar
UITableViewController
uma subclasse ou usar umTableView
dentro de seuViewController
. Depois disso, você deve implementar os métodos requeridos (cellForRowAtIndexPath
and numberOfRowsInSection
) que são declarados noUITableviewDataSource
.Também no storyboard, você precisa criar protótipos de células com ID exclusivo.
Existem tipos básicos de células, com (título, subtítulo, por exemplo) - você também pode usá-los se não precisar de configuração especial.
Portanto, para o selecionador, sim, você precisa criar sua própria célula personalizada. Crie a
UITableViewCell
classe personalizada necessária segurando o selecionador de data e certifique-se de usar delegado para enviar de volta o resultado desejado para o seuViewController
.fonte