Eu tenho um tableview
, onde às vezes pode não haver resultados para listar, então eu gostaria de colocar algo que diz "nenhum resultado" se não houver resultados (um rótulo ou uma célula de exibição de tabela?).
Existe uma maneira mais fácil de fazer isso?
Eu tentaria um label
atrás do e, em tableview
seguida, esconder um dos dois com base nos resultados, mas como estou trabalhando com um TableViewController
e não com um normal, ViewController
não tenho certeza se isso é inteligente ou factível.
Também estou usando Parse
e criando subclasses como PFQueryTableViewController
:
@interface TableViewController : PFQueryTableViewController
Posso fornecer quaisquer detalhes adicionais necessários, basta me avisar!
TableViewController
Cena no Storyboard:
EDIT: Por Midhun MP, aqui está o código que estou usando
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
NSInteger numOfSections = 0;
if ([self.stringArray count] > 0)
{
self.tableView.separatorStyle = UITableViewCellSeparatorStyleSingleLine;
numOfSections = 1;
//yourTableView.backgroundView = nil;
self.tableView.backgroundView = nil;
}
else
{
UILabel *noDataLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, self.tableView.bounds.size.width, self.tableView.bounds.size.height)];
noDataLabel.text = @"No data available";
noDataLabel.textColor = [UIColor blackColor];
noDataLabel.textAlignment = NSTextAlignmentCenter;
//yourTableView.backgroundView = noDataLabel;
//yourTableView.separatorStyle = UITableViewCellSeparatorStyleNone;
self.tableView.backgroundView = noDataLabel;
self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
}
return numOfSections;
}
E aqui está a visualização que estou obtendo, ela ainda tem linhas separadoras. Tenho a impressão de que esta é uma pequena alteração, mas não tenho certeza de por que as linhas separadoras estão aparecendo.
numberOfSections
deve retornar uma contagem e é isso. O mesmo paranumberOfRowsInSection
. Eles podem ser chamados várias vezes a qualquer momento. Nunca atualize visualizações ou dados, nem faça nada, exceto retornar uma contagem. A lógica para atualizar as visualizações nunca deve estar nesses métodos.Respostas:
Você pode conseguir isso facilmente usando a
backgroundView
propriedade deUITableView
.Objetivo C:
Rápido:
Referência Referência de classe UITableView
fonte
tableView
válvula de escape para poder fazeryourTableView.backgroundView
? Estou usando um,TableViewController
então não tenho uma saída para ele agora, é por isso que estou me perguntando.UITableViewController
já tem uma propriedade chamada,tableView
então você não precisa criar umaself.tableView
numberOfSections
deve retornar uma contagem e é isso. O mesmo paranumberOfRowsInSection
. Eles podem ser chamados várias vezes a qualquer momento. Nunca atualize visualizações ou dados, nem faça nada, exceto retornar uma contagem. A lógica para atualizar as visualizações nunca deve estar nesses métodos.Para Xcode 8.3.2 - Swift 3.1
Aqui está uma maneira não tão conhecida, mas incrivelmente fácil de conseguir adicionar uma visualização "Sem Itens" a uma visualização de tabela vazia que remonta ao Xcode 7. Deixarei para você controlar a lógica que adiciona / remove o view para a visão de fundo da tabela, mas aqui está o fluxo para um storyboard Xcode (8.3.2):
Em última análise, isso funciona sempre que você deseja adicionar uma visualização simples ao controlador de visualização que não deseja necessariamente que seja exibida imediatamente, mas que também não deseja codificar manualmente.
fonte
Versão Swift do código acima: -
Mas se você estiver carregando informações de um JSON, você precisa verificar se o JSON está vazio ou não, portanto, se você colocar um código como este, ele inicialmente mostra a mensagem "Sem dados" e depois desaparece. Porque depois que a tabela recarrega os dados a mensagem se esconde. Portanto, você pode colocar esse código para carregar dados JSON em uma matriz. TÃO :-
fonte
self.tableView.reloadData()
são chamados? Descobri que ele está adicionando minhas novas linhas, masnoDataLabel
ainda é exibido abaixo delas.self.tableView.backgroundView = nil
na minha declaração if antes dereturn jobs_list.count
funcionar bem. obrigadonumberOfSections
deve retornar uma contagem e é isso. O mesmo paranumberOfRowsInSection
. Eles podem ser chamados várias vezes a qualquer momento. Nunca atualize visualizações ou dados, nem faça nada, exceto retornar uma contagem. A lógica para atualizar as visualizações nunca deve estar nesses métodos.Você pode tentar este controle. É muito legal. DZNEmptyDataSet
Ou se eu fosse você tudo que faria é
Mole-mole
fonte
Swift 3 (atualizado):
fonte
numberOfSections
deve retornar uma contagem e é isso. O mesmo paranumberOfRowsInSection
. Eles podem ser chamados várias vezes a qualquer momento. Nunca atualize visualizações ou dados, nem faça nada, exceto retornar uma contagem. A lógica para atualizar as visualizações nunca deve estar nesses métodos.Swift3.0
Espero que sirva ao seu propósito ...... Em seu UITableViewController.
Classe auxiliar com função:
fonte
numberOfSections
deve retornar uma contagem e é isso. O mesmo paranumberOfRowsInSection
. Eles podem ser chamados várias vezes a qualquer momento. Nunca atualize visualizações ou dados, nem faça nada, exceto retornar uma contagem. A lógica para atualizar as visualizações nunca deve estar nesses métodos.Acho que a maneira mais elegante de resolver seu problema é mudar de a
UITableViewController
para aUIViewController
que contém aUITableView
. Desta forma, você pode adicionar oUIView
que quiser como subvisões da visão principal.Eu não recomendaria usar um UITableViewCell para fazer isso, você pode precisar adicionar coisas adicionais no futuro e as coisas podem ficar feias rapidamente.
Você também pode fazer algo assim, mas também não é a melhor solução.
fonte
UIViewController
contendo aUITableView
.UITableViewController
mim mesmo, porque usá-lo não é realmente muito mais fácil do que fazê-lo de outra forma, mas limita sua capacidade de mudar as coisas no futuro.Use este código em seu
numberOfSectionsInTableView
método: -fonte
numberOfSections
deve retornar uma contagem e é isso. O mesmo paranumberOfRowsInSection
. Eles podem ser chamados várias vezes a qualquer momento. Nunca atualize visualizações ou dados, nem faça nada, exceto retornar uma contagem. A lógica para atualizar as visualizações nunca deve estar nesses métodos.SWIFT 3
fonte
Se você não usar o rodapé do tableview e não quiser que o tableview preencha a tela com células vazias da tabela padrão, sugiro que você defina o rodapé do tableview como um UIView vazio. Não sei a sintaxe correta para fazer isso em obj-c ou Swift, mas em Xamarin.iOS eu faria assim:
O código acima resultará em uma tableview sem as células vazias
fonte
Aqui está a solução que funcionou para mim.
Adicione o seguinte código a um novo arquivo.
Altere sua classe de tabela para a classe personalizada "MyTableView" de storyboard ou .xib
(isso funcionará apenas para a primeira seção. Se você quiser personalizar mais, faça alterações na função reloadData () MyTableView de acordo com as outras seções)
fonte
@IBInspectable var emptyStateText: String?
e marque esta classe, pois@IBDesignable
então você será capaz de alterar diferentes textos de estado vazio para diferentes cenas em storyboard ou xibs. Aproveitar! :)Eu apresentaria uma visualização de sobreposição com a aparência e a mensagem que você deseja, se a visualização em mesa não tivesse resultados. Você poderia fazer isso em ViewDidAppear, então você tem os resultados antes de mostrar / não mostrar a vista.
fonte
Se você quiser fazer isso sem nenhum código, tente isso!
Clique em sua tableView.
Altere o estilo de "simples" para "agrupado".
Agora, quando você usa ....
tableView.backgroundView = INSERT SUA ETIQUETA OU EXIBIR
Não vai mostrar os separadores!
fonte
Adicione este código em um arquivo e altere o tipo de coleção para CustomCollectionView
fonte