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 label
detrás y tableview
luego ocultaría una de las dos según los resultados, pero como estoy trabajando con una TableViewController
y no una normal, ViewController
no estoy seguro de qué tan inteligente o factible es.
También estoy usando Parse
y 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.
numberOfSections
deberí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
backgroundView
propiedad deUITableView
.C objetivo:
Rápido:
Referencia Referencia de la clase UITableView
fuente
tableView
salida para poder hacerloyourTableView.backgroundView
? Estoy usando un,TableViewController
así que no tengo una salida para él en este momento, por eso me pregunto.UITableViewController
ya tiene una propiedad nombrada,tableView
por lo que no necesita crear unaself.tableView
numberOfSections
deberí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, peronoDataLabel
todavía se muestra debajo de ellas.self.tableView.backgroundView = nil
mi declaración if antesreturn jobs_list.count
funciona bien. graciasnumberOfSections
deberí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
numberOfSections
deberí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
numberOfSections
deberí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
UITableViewController
a aUIViewController
que contiene aUITableView
. De esta manera, puede agregar loUIView
que 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
UIViewController
contenga unUITableView
.UITableViewController
yo 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
numberOfSectionsInTableView
método: -fuente
numberOfSections
deberí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@IBDesignable
entonces 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