Tengo un tableview, donde a veces puede que no haya resultados para listar, así que me gustaría poner algo que diga "sin resultados" si no hay resultados (¿una etiqueta o una celda de vista de tabla?).
¿Existe una forma más sencilla de hacer esto?
Intentaría una labeldetrás y tableviewluego ocultaría una de las dos según los resultados, pero como estoy trabajando con una TableViewControllery no una normal, ViewControllerno estoy seguro de qué tan inteligente o factible es.
También estoy usando Parsey subclasificando como PFQueryTableViewController:
@interface TableViewController : PFQueryTableViewController
Puedo proporcionar cualquier información adicional necesaria, ¡solo hágamelo saber!
TableViewController Escena en Storyboard:

EDITAR: Por Midhun MP, aquí está el código que estoy 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;
}
Y aquí está la Vista que obtengo, todavía tiene líneas de separación. Tengo la sensación de que se trata de un pequeño cambio, pero no estoy seguro de por qué aparecen las líneas de separación.


numberOfSectionsdebería devolver un recuento y eso es todo. Lo mismo paranumberOfRowsInSection. Estos se pueden llamar muchas veces en cualquier momento. Nunca actualice las vistas ni actualice los datos ni haga nada excepto devolver un recuento. La lógica para actualizar las vistas nunca debe estar en estos métodos.Respuestas:
Puede lograrlo fácilmente utilizando la
backgroundViewpropiedad deUITableView.C objetivo:
Rápido:
Referencia Referencia de la clase UITableView
fuente
tableViewsalida para poder hacerloyourTableView.backgroundView? Estoy usando un,TableViewControllerasí que no tengo una salida para él en este momento, por eso me pregunto.UITableViewControllerya tiene una propiedad nombrada,tableViewpor lo que no necesita crear unaself.tableViewnumberOfSectionsdebería devolver un recuento y eso es todo. Lo mismo paranumberOfRowsInSection. Estos se pueden llamar muchas veces en cualquier momento. Nunca actualice las vistas ni los datos, ni haga nada excepto devolver un recuento. La lógica para actualizar las vistas nunca debe estar en estos métodos.Para Xcode 8.3.2 - Swift 3.1
Aquí hay una manera no tan conocida pero increíblemente fácil de lograr agregar una vista "Sin elementos" a una vista de tabla vacía que se remonta a Xcode 7. Dejaré que usted controle esa lógica que agrega / elimina el vista a la vista de fondo de la tabla, pero aquí está el flujo de un guión gráfico de Xcode (8.3.2):
En última instancia, esto funciona siempre que desee agregar una vista simple a su controlador de vista que no necesariamente desea que se muestre de inmediato, pero que tampoco desea codificar a mano.
fuente
Versión rápida del código anterior: -
Pero si está cargando información desde un JSON, debe verificar si el JSON está vacío o no, por lo tanto, si coloca un código como este, inicialmente muestra el mensaje "No hay datos" y luego desaparece. Porque después de que la tabla recarga los datos, el mensaje se oculta. Entonces, puede poner este código donde cargar datos JSON en una matriz. ENTONCES :-
fuente
self.tableView.reloadData()se llaman? Descubrí que está agregando mis nuevas filas, peronoDataLabeltodavía se muestra debajo de ellas.self.tableView.backgroundView = nilmi declaración if antesreturn jobs_list.countfunciona bien. graciasnumberOfSectionsdebería devolver un recuento y eso es todo. Lo mismo paranumberOfRowsInSection. Estos se pueden llamar muchas veces en cualquier momento. Nunca actualice las vistas ni los datos, ni haga nada excepto devolver un recuento. La lógica para actualizar las vistas nunca debe estar en estos métodos.Puedes probar este control. Está bastante bien. DZNEmptyDataSet
O si yo fuera tu todo lo que haría es
Pan comido
fuente
Swift 3 (actualizado):
fuente
numberOfSectionsdebería devolver un recuento y eso es todo. Lo mismo paranumberOfRowsInSection. Estos se pueden llamar muchas veces en cualquier momento. Nunca actualice las vistas ni los datos, ni haga nada excepto devolver un recuento. La lógica para actualizar las vistas nunca debe estar en estos métodos.Swift3.0
Espero que sirva a su propósito ... En su UITableViewController.
Clase auxiliar con función:
fuente
numberOfSectionsdebería devolver un recuento y eso es todo. Lo mismo paranumberOfRowsInSection. Estos se pueden llamar muchas veces en cualquier momento. Nunca actualice las vistas ni los datos, ni haga nada excepto devolver un recuento. La lógica para actualizar las vistas nunca debe estar en estos métodos.Creo que la forma más elegante de resolver su problema es cambiar de a
UITableViewControllera aUIViewControllerque contiene aUITableView. De esta manera, puede agregar loUIViewque desee como subvistas de la vista principal.No recomendaría usar un UITableViewCell para hacer esto, es posible que necesite agregar cosas adicionales en el futuro y las cosas pueden ponerse feas rápidamente.
También puede hacer algo como esto, pero tampoco es la mejor solución.
fuente
UIViewControllercontenga unUITableView.UITableViewControlleryo mismo, porque usarlo no es mucho más fácil que hacerlo al revés, pero limita tu capacidad para cambiar las cosas en el futuro.Utilice este código en su
numberOfSectionsInTableViewmétodo: -fuente
numberOfSectionsdebería devolver un recuento y eso es todo. Lo mismo paranumberOfRowsInSection. Estos se pueden llamar muchas veces en cualquier momento. Nunca actualice las vistas ni los datos, ni haga nada excepto devolver un recuento. La lógica para actualizar las vistas nunca debe estar en estos métodos.SWIFT 3
fuente
Si no usa el pie de página de la vista de tabla y no desea que la vista de tabla llene la pantalla con celdas de tabla predeterminadas vacías, le sugiero que configure el pie de página de la vista de tabla en una UIView vacía. No conozco la sintaxis correcta para hacer esto en obj-c o Swift, pero en Xamarin.iOS lo haría así:
El código anterior dará como resultado una vista de tabla sin las celdas vacías
fuente
Aquí está la solución que funcionó para mí.
Agregue el siguiente código a un archivo nuevo.
Cambie su clase de tabla a la clase personalizada "MyTableView" desde el guión gráfico o .xib
(esto funcionará solo para la primera sección. Si desea personalizar más, haga cambios en la función reloadData () de MyTableView en consecuencia para otras secciones)
fuente
@IBInspectable var emptyStateText: String?y marque esta clase, ya que@IBDesignableentonces podrá cambiar diferentes textos de estado vacío para diferentes escenas en el guión gráfico o xibs. ¡Disfrutar! :)Presentaría una vista superpuesta que tiene el aspecto y el mensaje que desea si la vista de tabla no tiene resultados. Puede hacerlo en ViewDidAppear, para tener los resultados antes de mostrar / no mostrar la vista.
fuente
Si quieres hacer esto sin ningún código, ¡prueba esto!
Haga clic en su tableView.
Cambie el estilo de "simple" a "agrupado".
Ahora, cuando uses ...
tableView.backgroundView = INSERTAR SU ETIQUETA O VER
¡No mostrará los separadores!
fuente
Agregue este código en un archivo y cambie su tipo de colección a CustomCollectionView
fuente