Tengo un tableview, donde a veces no hay ningún resultado a la lista, así que me gustaría poner algo que dice «no hay resultados» si no hay resultados (ya sea una etiqueta o una vista de tabla de la célula?).

Hay una forma más sencilla de hacer esto?

Me gustaría probar una label detrás de la tableview, a continuación, ocultar uno de los dos basados en los resultados, pero ya que estoy trabajando con un TableViewController y no una normal ViewController no estoy seguro de cuán inteligente o factible que es.

También estoy usando Parse y subclases como un PFQueryTableViewController:

@interface TableViewController : PFQueryTableViewController

Me puede proporcionar cualquier información adicional necesaria, sólo hágamelo saber!

TableViewController Escena en el Guión gráfico:

Si no hay ninguna Tabla de la Vista de los resultados, la pantalla

EDICIÓN: Por Midhun MP, este es 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í es el punto de Vista de que estoy consiguiendo, aún tiene un separador de líneas. Tengo la sensación de que este es un pequeño cambio, pero no estoy seguro de por qué separador de líneas se están presentando?

Si no hay ninguna Tabla de la Vista de los resultados, la pantalla

  • Creo que el truco estaba en el programa de instalación de vacío footerView en formato tableview para deshacerse de las líneas.
  • ¿Qué quieres decir con eso?
  • No use la solución añadido a esta pregunta. La vista de la tabla de origen de datos de métodos debe nunca hacer más de lo que se supone que deben hacer. numberOfSections debe devolver un número y que es. Mismo para numberOfRowsInSection. Estos pueden ser llamados muchas veces en cualquier momento. Nunca vistas de actualización o actualización de datos o hacer cualquier cosa excepto devolver un número. La lógica de la actualización de vistas nunca debe ser en estos métodos.
InformationsquelleAutor SRMR | 2015-02-16

14 Comentarios

  1. 198

    Usted puede lograr fácilmente que mediante el uso de backgroundView propiedad de UITableView.

    Objetivo C:

    - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
    {
        NSInteger numOfSections = 0;
        if (youHaveData)
        {
            yourTableView.separatorStyle = UITableViewCellSeparatorStyleSingleLine;
            numOfSections                = 1;
            yourTableView.backgroundView = nil;
        }
        else
        {   
            UILabel *noDataLabel         = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, yourTableView.bounds.size.width, yourTableView.bounds.size.height)];
            noDataLabel.text             = @"No data available";
            noDataLabel.textColor        = [UIColor blackColor];
            noDataLabel.textAlignment    = NSTextAlignmentCenter;
            yourTableView.backgroundView = noDataLabel;
            yourTableView.separatorStyle = UITableViewCellSeparatorStyleNone;
        }
    
        return numOfSections;
    }

    Swift:

    func numberOfSections(in tableView: UITableView) -> Int
    {
        var numOfSections: Int = 0
        if youHaveData
        {
            tableView.separatorStyle = .singleLine
            numOfSections            = 1
            tableView.backgroundView = nil
        }
        else
        {
            let noDataLabel: UILabel  = UILabel(frame: CGRect(x: 0, y: 0, width: tableView.bounds.size.width, height: tableView.bounds.size.height))
            noDataLabel.text          = "No data available"
            noDataLabel.textColor     = UIColor.black
            noDataLabel.textAlignment = .center
            tableView.backgroundView  = noDataLabel
            tableView.separatorStyle  = .none
        }
        return numOfSections
    }

    Referencia UITableView De Referencia De La Clase

    backgroundView Propiedad

    La visión de fondo de la vista de tabla.

    Declaración

    Swift

    var backgroundView: UIView?

    Objective-C

    @property(nonatomic, readwrite, retain) UIView *backgroundView

    Discusión

    Una vista de tabla de fondo de la vista cambia de tamaño automáticamente para que coincida con el
    el tamaño de la vista de tabla. Este punto de vista se coloca como una subvista de la tabla
    ver detrás de todas las celdas de encabezado de vistas, y el pie de página vistas.

    Debe establecer esta propiedad a cero para establecer el color de fondo de la
    la vista de tabla.

    • Gracias por la respuesta! Esto significa que necesita un tableView toma de corriente para que yo pueda hacer yourTableView.backgroundView? Estoy usando un TableViewController así que no tengo una salida para él ahora mismo, es por eso que estoy preguntando.
    • UITableViewController ya tiene una propiedad denominada tableView así que usted no necesita crear un
    • Lo consiguió, mediante self.tableView
    • Voy a poner el separador de líneas, alguna idea de por qué? Gracias!
    • ¿Usted se propuso UITableViewCellSeparatorStyleNone como seperatorStyle ?
    • Sí, he editado mi respuesta a mostrar el código que tengo ahora y la captura de pantalla. Ver nada funky que me estoy perdiendo?
    • He comprobado el código mediante la creación de un nuevo proyecto (usando el Maestro-Detalle de la plantilla que se proporciona en XCode). Y está funcionando perfectamente. Probablemente usted está teniendo algunos ajustes en el guión, que está causando el problema
    • Ok voy a tratar de averiguarlo
    • Por alguna razón, yo soy incapaz de configurar el backgroundView o fondo de mi UITableView y registrarlo. He intentado todo lo que puede ser probado con el código, pensando que es un Guión gráfico problema.
    • No debemos instanciar UILabel de clase, una vez en viewDidAppear cuando la vista de la tabla se mide en la pantalla?
    • Trabajo perfecto. Sin embargo, cuando se elimina una fila estaba recibiendo un error. En la otra parte me puse numOfSections = 0. Solucionado mi estrellarse error.
    • Este código no funcionará como este, se bloqueará cuando devolución número de filas menos 1. Voy a editar el código.
    • crash es lo que no ha sucedido en el presente código. Si no hay ninguna fila, después de una eliminación, usted debe utilizar reloadData, en lugar de deleterowatindexpath.
    • Estoy preguntado por qué los que te ayudaron. Porque estamos inicializado el numOfSections a 0 y si no va a entrar en el bloque if el valor será 0. Así que de nuevo el ajuste a 0 en los demás no hará ninguna diferencia. Creo que usted debe comprobar mi anterior comentario, supongo que es la razón de su caída. De todos modos gracias por tu comentario.
    • La corrección. A más pruebas, en realidad tenía para hacer que la línea que he mencionado devuelven el mismo valor. numOfSections = 1. Si me hacen cero y mi vista de la tabla está vacía, funciona, pero cuando voy a crear una celda y, a continuación, elimínelo, en lugar de eliminar y mostrar el mensaje, se bloquea con el siguiente error. *** Terminación de la aplicación debido a uncaught exception ‘NSInternalInconsistencyException’, la razón: ‘UITableView interno error: no se puede generar una nueva sección de mapa con el viejo de la sección count: 1 y la nueva sección count: 0’. No sé por qué devolver el mismo valor las obras, pero lo hace y funciona como debe.
    • No use esta solución. La vista de la tabla de origen de datos de métodos debe nunca hacer más de lo que se supone que deben hacer. numberOfSections debe devolver un número y que es. Mismo para numberOfRowsInSection. Estos pueden ser llamados muchas veces en cualquier momento. Nunca vistas de actualización o actualización de datos o hacer cualquier cosa excepto devolver un número. La lógica de la actualización de vistas nunca debe ser en estos métodos.
    • A continuación, puede usted por favor responder a la pregunta ? También podrías por favor compartir el documento oficial que menciona los mencionados puntos ? Podría usted por favor hágamelo saber los escenarios en los que la numberOfSections puede ser llamado varias veces (aparte de llamar a cargar datos)?
    • que es la más bonita manera? el uso de backgroundView o crear subclases de una clase de células para mostrar los datos no?

  2. 95

    Para Xcode 8.3.2 – Swift 3.1

    Aquí es un no tan conocidas, pero increíblemente fácil camino para alcanzar la adición de un «No hay Elementos» ver a un vacío de la vista de la tabla que se remonta a Xcode 7. Yo voy a dejar a usted el control de esa lógica que agrega/quita la vista a la mesa del fondo de la vista, pero aquí es el flujo y Xcode (8.3.2) guión:

    1. Seleccione la escena en el Guión gráfico que tiene su vista de tabla.
    2. Arrastrar un vacío UIView a la «Escena del Muelle» de esa escena

    Si no hay ninguna Tabla de la Vista de los resultados, la pantalla

    1. Agregar un UILabel y las restricciones a la nueva vista y, a continuación, crear un IBOutlet para que la vista

    Si no hay ninguna Tabla de la Vista de los resultados, la pantalla

    1. Asignar que ver con el formato tableview.backgroundView

    Si no hay ninguna Tabla de la Vista de los resultados, la pantalla

    1. He aquí la magia!

    Si no hay ninguna Tabla de la Vista de los resultados, la pantalla

    En última instancia, esto funciona en cualquier momento que desee agregar una simple vista a su controlador de vista que no necesariamente quiere mostrarse inmediatamente, pero que también no quieren a mano el código.

    • He estado haciendo iOS 5 años y nunca sabía esto, y aprender algo nuevo cada día. Gracias por esto!
    • Esta técnica funciona para cualquier cosa que usted necesite un simple vista para. También he utilizado para la costumbre de la tabla de cabeceras de sección. En realidad, usted puede utilizarlo para cualquier cosa que usted necesita una vista para. Sólo de referencia a través de un IBOutlet y añadir subvista en cualquier lugar que necesite una vista personalizada.
    • Esta es una excelente solución. Gracias por señalarlo!
    • Como @gmogames dijo, después de hacer IOS para 2 años, esta es la primera vez que saber sobre el formato tableview de fondo !. gracias man
    • Gracias por este. Solo para poner lo que hay, he tenido que utilizar en formato tableview.separatorStyle = .ninguno y cambiar el tamaño del defecto UIView para ver el backgroundView. Estoy usando Xcode 9.4 con Swift 4.
    • Increíble. Muestra lo fácil que puede ser si usted acaba de saber lo que estás haciendo. Gracias.
    • Una solución excelente Gracias!!
    • Puro trabajo de magia. Gracias por la solución.
    • ¿Cómo hacer la vista personalizada?
    • En el caso de que el formato tableview de fondo, que acaba de asignar la vista que se creó como un IBOutlet para el formato tableview del fondo o, si sólo quieres añadir la vista a cualquier otro punto de vista, sólo se puede añadir una subvista. Usted tendrá que establecer el marco de los valores, pero es como cualquier otro punto de vista.

  3. 30

    Swift Versión de código anterior :-

    func numberOfSectionsInTableView(tableView: UITableView) -> Int {
    
        var numOfSection: NSInteger = 0
    
        if CCompanyLogoImage.count > 0 {
    
            self.tableView.backgroundView = nil
            numOfSection = 1
    
    
        } else {
    
            var noDataLabel: UILabel = UILabel(frame: CGRectMake(0, 0, self.tableView.bounds.size.width, self.tableView.bounds.size.height))
            noDataLabel.text = "No Data Available"
            noDataLabel.textColor = UIColor(red: 22.0/255.0, green: 106.0/255.0, blue: 176.0/255.0, alpha: 1.0)
            noDataLabel.textAlignment = NSTextAlignment.Center
            self.tableView.backgroundView = noDataLabel
    
        }
        return numOfSection
    }

    Pero Si se carga la Información De un JSON , es necesario comprobar si el JSON es vacío o no , por lo tanto si pones un código como este se muestra inicialmente «No hay datos» Mensaje luego desaparecen. Porque después de la tabla de volver a cargar los datos en el mensaje de ocultar. Así que Usted puede poner este código en el lugar de carga de datos en JSON a una matriz. ASÍ :-

    func numberOfSectionsInTableView(tableView: UITableView) -> Int {
    return 1
    }
    func extract_json(data:NSData) {
    var error: NSError?
    let jsonData: AnyObject? = NSJSONSerialization.JSONObjectWithData(data, options:NSJSONReadingOptions.MutableContainers , error: &error)
    if (error == nil) {
    if let jobs_list = jsonData as? NSArray
    {
    if jobs_list.count == 0 {
    var noDataLabel: UILabel = UILabel(frame: CGRectMake(0, 0, self.tableView.bounds.size.width, self.tableView.bounds.size.height))
    noDataLabel.text = "No Jobs Available"
    noDataLabel.textColor = UIColor(red: 22.0/255.0, green: 106.0/255.0, blue: 176.0/255.0, alpha: 1.0)
    noDataLabel.textAlignment = NSTextAlignment.Center
    self.tableView.backgroundView = noDataLabel
    }
    for (var i = 0; i < jobs_list.count ; i++ )
    {
    if let jobs_obj = jobs_list[i] as? NSDictionary
    {
    if let vacancy_title = jobs_obj["VacancyTitle"] as? String
    {
    CJobTitle.append(vacancy_title)
    if let vacancy_job_type = jobs_obj["VacancyJobType"] as? String
    {
    CJobType.append(vacancy_job_type)
    if let company_name = jobs_obj["EmployerCompanyName"] as? String
    {
    CCompany.append(company_name)
    if let company_logo_url = jobs_obj["EmployerCompanyLogo"] as? String
    {
    //CCompanyLogo.append("http://google.com" + company_logo_url)
    let url = NSURL(string: "http://google.com" + company_logo_url )
    let data = NSData(contentsOfURL:url!)
    if data != nil {
    CCompanyLogoImage.append(UIImage(data: data!)!)
    }
    if let vacancy_id = jobs_obj["VacancyID"] as? String
    {
    CVacancyId.append(vacancy_id)
    }
    }
    }
    }
    }
    }
    }
    }
    }
    do_table_refresh();
    }
    func do_table_refresh() {
    dispatch_async(dispatch_get_main_queue(), {
    self.tableView.reloadData()
    return
    })
    }
    • Esto funciona muy bien para mostrar la etiqueta cuando no hay datos en las filas. Sin embargo, ¿cuál es la mejor manera de manejar cuando los datos vienen en y self.tableView.reloadData() se llama? He encontrado que es la adición de mis nuevas filas, pero el noDataLabel aún se muestra debajo de ellos.
    • Si la matriz tiene objeto ajustar el auto.formato tableview.backgroundView = nil
    • si jobs_list.count == 0 { // añadir por encima del código } else { self.formato tableview.backgroundView = nil }
    • perfecto. la adición de self.tableView.backgroundView = nil en mi declaración de si antes de return jobs_list.count funciona bien. gracias
    • No utilice la primera solución en esta respuesta. La vista de la tabla de origen de datos de métodos debe nunca hacer más de lo que se supone que deben hacer. numberOfSections debe devolver un número y que es. Mismo para numberOfRowsInSection. Estos pueden ser llamados muchas veces en cualquier momento. Nunca vistas de actualización o actualización de datos o hacer cualquier cosa excepto devolver un número. La lógica de la actualización de vistas nunca debe ser en estos métodos.
  4. 7

    Usted puede probar este control. Es bastante limpio. DZNEmptyDataSet

    O si yo fuera usted, todos los que yo haría es

    • Comprobar para ver si su matriz de datos está vacía
    • Si está vacía, a continuación, agregue un objeto llamado @»No hay Datos» para que
    • Mostrar que la cadena en la celda.textLabel.texto

    Easy peasy

    • Que es un fresco de control, voy a probar tratando de usar que o subiendo w el código para hacerlo como tu bulletpoints!
  5. 5

    Swift 3 (actualizado):

    override func numberOfSections(in tableView: UITableView) -> Int {
    if myArray.count > 0 {
    self.tableView.backgroundView = nil
    self.tableView.separatorStyle = .singleLine
    return 1
    }
    let rect = CGRect(x: 0,
    y: 0,
    width: self.tableView.bounds.size.width,
    height: self.tableView.bounds.size.height)
    let noDataLabel: UILabel = UILabel(frame: rect)
    noDataLabel.text = "Custom message."
    noDataLabel.textColor = UIColor.white
    noDataLabel.textAlignment = NSTextAlignment.center
    self.tableView.backgroundView = noDataLabel
    self.tableView.separatorStyle = .none
    return 0
    }
    • No use esta solución. La vista de la tabla de origen de datos de métodos debe nunca hacer más de lo que se supone que deben hacer. numberOfSections debe devolver un número y que es. Mismo para numberOfRowsInSection. Estos pueden ser llamados muchas veces en cualquier momento. Nunca vistas de actualización o actualización de datos o hacer cualquier cosa excepto devolver un número. La lógica de la actualización de vistas nunca debe ser en estos métodos.
    • Estoy de acuerdo. Esta solución se puede mejorar, pero también puede ser utilizado.
    • ¿Cómo puede usted acepta que usted no debe usar esta solución, pero entonces el estado que es también puede ser utilizado? Que es una contradicción.
    • Estoy de acuerdo en que esta solución se puede mejorar, pero, en su estado actual, también funcionará.
  6. 5

    Swift3.0

    Espero que el servidor de su propósito……
    En su UITableViewController .

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    if searchController.isActive && searchController.searchBar.text != "" {
    if filteredContacts.count > 0 {
    self.tableView.backgroundView = .none;
    return filteredContacts.count
    } else {
    Helper.EmptyMessage(message: ConstantMap.NO_CONTACT_FOUND, viewController: self)
    return 0
    }
    } else {
    if contacts.count > 0 {
    self.tableView.backgroundView = .none;
    return contacts.count
    } else {
    Helper.EmptyMessage(message: ConstantMap.NO_CONTACT_FOUND, viewController: self)
    return 0
    }
    }
    }

    Ayudante de Clase con la función :

     /* Description: This function generate alert dialog for empty message by passing message and
    associated viewcontroller for that function
    - Parameters:
    - message: message that require for  empty alert message
    - viewController: selected viewcontroller at that time
    */
    static func EmptyMessage(message:String, viewController:UITableViewController) {
    let messageLabel = UILabel(frame: CGRect(x: 0, y: 0, width: viewController.view.bounds.size.width, height: viewController.view.bounds.size.height))
    messageLabel.text = message
    let bubbleColor = UIColor(red: CGFloat(57)/255, green: CGFloat(81)/255, blue: CGFloat(104)/255, alpha :1)
    messageLabel.textColor = bubbleColor
    messageLabel.numberOfLines = 0;
    messageLabel.textAlignment = .center;
    messageLabel.font = UIFont(name: "TrebuchetMS", size: 18)
    messageLabel.sizeToFit()
    viewController.tableView.backgroundView = messageLabel;
    viewController.tableView.separatorStyle = .none;
    }
    • No use esta solución. La vista de la tabla de origen de datos de métodos debe nunca hacer más de lo que se supone que deben hacer. numberOfSections debe devolver un número y que es. Mismo para numberOfRowsInSection. Estos pueden ser llamados muchas veces en cualquier momento. Nunca vistas de actualización o actualización de datos o hacer cualquier cosa excepto devolver un número. La lógica de la actualización de vistas nunca debe ser en estos métodos.
    • rmaddy . … mirando hacia adelante para su solución .
  7. 3

    Creo que la manera más elegante de resolver el problema es el cambio de una UITableViewController a un UIViewController que contiene un UITableView. De esta manera usted puede agregar cualquier UIView desea como subvistas de la vista principal.

    Yo no recomendaría el uso de un UITableViewCell para hacer esto usted puede ser que necesite añadir más cosas en el futuro y las cosas que puede rápidamente poner feo.

    Usted también puede hacer algo como esto, pero esta no es la mejor solución.

    UIWindow* window = [[UIApplication sharedApplication] keyWindow];
    [window addSubview: OverlayView];
    • Gracias por el color alrededor de los cuales es la manera más elegante de implementar, siempre es una buena manera de pensar. Yo podría tratar de cambiar mi guión para utilizar un UIViewController que contiene un UITableView.
    • Esa es la mayor prueba de futuro camino. Nunca he usado un UITableViewController a mí mismo, puesto que su uso no es realmente mucho más fácil que hacerlo de la otra manera, sin embargo, limita su capacidad para cambiar las cosas en el futuro.
    • Este no es el futuro si usted tiene translúcido bares. Yo recomiendo en contra. Al menos, hacer un UIViewController que contiene un UITableViewController y ajusta las cosas adecuadamente.
  8. 3

    Utilizar este código en Tu numberOfSectionsInTableView método:-

    if ([array count]==0
    {
    UILabel *fromLabel = [[UILabel alloc]initWithFrame:CGRectMake(50, self.view.frame.size.height/2, 300, 60)];                                                                                        
    fromLabel.text [email protected]"No Result";
    fromLabel.baselineAdjustment = UIBaselineAdjustmentAlignBaselines;
    fromLabel.backgroundColor = [UIColor clearColor];
    fromLabel.textColor = [UIColor lightGrayColor];
    fromLabel.textAlignment = NSTextAlignmentLeft;
    [fromLabel setFont:[UIFont fontWithName:Embrima size:30.0f]];
    [self.view addSubview:fromLabel];
    [self.tblView setHidden:YES];
    }
    • Super útil, voy a probar esto. Gracias por poner algo de código para ayudar en el proceso!
    • No use esta solución. La vista de la tabla de origen de datos de métodos debe nunca hacer más de lo que se supone que deben hacer. numberOfSections debe devolver un número y que es. Mismo para numberOfRowsInSection. Estos pueden ser llamados muchas veces en cualquier momento. Nunca vistas de actualización o actualización de datos o hacer cualquier cosa excepto devolver un número. La lógica de la actualización de vistas nunca debe ser en estos métodos.
  9. 2

    SWIFT 3

            let noDataLabel: UILabel     = UILabel(frame: CGRect(x: 0, y: 0, width: tableView.bounds.size.width, height: tableView.bounds.size.height))
    noDataLabel.text             = "No data available"
    noDataLabel.textColor        = UIColor.white
    noDataLabel.font             = UIFont(name: "Open Sans", size: 15)
    noDataLabel.textAlignment    = .center
    tableView.backgroundView = noDataLabel
    tableView.separatorStyle = .none
  10. 2

    Aquí está la solución que funcionó para mí.

    1. Agregue el código siguiente en un nuevo archivo.

    2. Cambiar su tabla de clase a la clase personalizada «MyTableView» desde el guión gráfico o .xib

    (esto funcionará para la primera sección. Si quieres personalizar más, hacer cambios en la MyTableView reloadData() función en consecuencia para otras secciones)

    public class MyTableView: UITableView {
    override public func reloadData() {
    super.reloadData()
    if self.numberOfRows(inSection: 0) == 0 {
    if self.viewWithTag(1111) == nil {
    let noDataLabel = UILabel()
    noDataLabel.textAlignment = .center
    noDataLabel.text = "No Data Available"
    noDataLabel.tag = 1111
    noDataLabel.center = self.center
    self.backgroundView = noDataLabel
    }
    } else {
    if self.viewWithTag(1111) != nil {
    self.backgroundView = nil
    }
    }
    }
    }
    • gr8 solución!!!
    • Este es un buen enfoque. He añadido alguna mejora como la siguiente para que sea más bien redondeado. 1. Caché de separador de estilo de formato tableview y restaurar al vacío o no vacío de transición de estado para hacer esta subclase aplicable para los casos de uso que diferentes separador de estilos deseados. 2. Agregar @IBInspectable var emptyStateText: String? y marca de esta clase como @IBDesignable entonces usted será capaz de cambiar su estado vacío de texto para las diferentes escenas en el guión gráfico o xibs. ¡A disfrutar! 🙂
  11. 1

    Me gustaría presentar una superposición de vista que tiene el aspecto y el mensaje que desea si el formato tableview no tiene resultados. Usted podría hacerlo en ViewDidAppear, por lo que los resultados antes de mostrar/no mostrar la vista.

    • Impresionante lo voy a pensar acerca de tratar de aplicar mejor que!
  12. 1

    Si usted no utiliza el formato tableview pie de página y no desea que el formato tableview para llenar la pantalla con vacío predeterminado de las celdas de la tabla me permito sugerir que usted establezca su formato tableview pie de página a un vacío de UIView. No conozco la sintaxis correcta para hacerlo en obj-c o Swift, pero en Xamarin.iOS yo lo haría así:

    public class ViewController : UIViewController
    {
    UITableView _table;
    public ViewController (IntPtr handle) : base (handle)
    {
    }
    public override void ViewWillAppear(bool animated) {
    //Initialize table
    _table.TableFooterView = new UIView();
    }
    }

    Código anterior se traducirá en un formato tableview sin celdas vacías

  13. 1

    Si quieres hacer esto sin ningún tipo de código, intente esto!

    Haga clic en el formato tableview.

    Si no hay ninguna Tabla de la Vista de los resultados, la pantalla

    Cambiar el estilo de «normal» a «agrupados».

    Si no hay ninguna Tabla de la Vista de los resultados, la pantalla

    Ahora, cuando se utiliza ….

    formato tableview.backgroundView = INSERTAR la ETIQUETA O VER

    No se mostrará el separadores!

  14. 1

    Añadir este código en un archivo y cambiar su tipo de colección a CustomCollectionView

    import Foundation
    class CustomCollectionView: UICollectionView {
    var emptyModel = EmptyMessageModel()
    var emptyView: EmptyMessageView?
    var showEmptyView: Bool = true
    override func reloadData() {
    super.reloadData()
    emptyView?.removeFromSuperview()
    self.backgroundView = nil
    if !showEmptyView {
    return
    }
    if numberOfSections < 1 {
    let rect = CGRect(x: 0,
    y: 0,
    width: self.bounds.size.width,
    height: self.bounds.size.height)
    emptyView = EmptyMessageView()
    emptyView?.frame = rect
    if let emptyView = emptyView {
    //               self.addSubview(emptyView)
    self.backgroundView = emptyView
    }
    emptyView?.setView(with: emptyModel)
    } else {
    emptyView?.removeFromSuperview()
    self.backgroundView = nil
    }
    }
    }
    class EmptyMessageView: UIView {
    @IBOutlet weak var messageLabel: UILabel!
    @IBOutlet weak var imageView: UIImageView!
    var view: UIView!
    override init(frame: CGRect) {
    super.init(frame: frame)
    xibSetup()
    }
    required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
    xibSetup()
    }
    func xibSetup() {
    view = loadViewFromNib()
    view.frame = bounds
    view.autoresizingMask = [.flexibleWidth, .flexibleHeight]
    addSubview(view)
    }
    func loadViewFromNib() -> UIView {
    let bundle = Bundle(for: type(of: self))
    let nib = UINib(nibName: "EmptyMessageView", bundle: bundle)
    let view = nib.instantiate(withOwner: self, options: nil)[0] as! UIView
    return view
    }
    func setView(with model: EmptyMessageModel) {
    messageLabel.text = model.message ?? ""
    imageView.image = model.image ?? #imageLiteral(resourceName: "no_notification")
    }
    }
    ///////////
    class EmptyMessageModel {
    var message: String?
    var image: UIImage?
    init(message: String = "No data available", image: UIImage = #imageLiteral(resourceName: "no_notification")) {
    self.message = message
    self.image = image
    }
    }

Dejar respuesta

Please enter your comment!
Please enter your name here