Se non ci sono risultati in Visualizzazione tabella, visualizzare "Nessun risultato" sullo schermo


114

Ho un tableview, dove a volte potrebbero non esserci risultati da elencare, quindi vorrei mettere qualcosa che dice "nessun risultato" se non ci sono risultati (un'etichetta o una cella della vista tabella?).

C'è un modo più semplice per farlo?

Vorrei provare un labeldietro e tableviewpoi nascondere uno dei due in base ai risultati, ma dal momento che sto lavorando con un TableViewControllere non un normale ViewControllernon sono sicuro di quanto sia intelligente o fattibile.

Sto anche usando Parsee sottoclasse come PFQueryTableViewController:

@interface TableViewController : PFQueryTableViewController

Posso fornire tutti i dettagli aggiuntivi necessari, fammelo sapere!

TableViewController Scena nello Storyboard:

inserisci qui la descrizione dell'immagine

EDIT: Per Midhun MP, ecco il codice che sto 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;
}

Ed ecco la vista che sto ottenendo, ha ancora linee di separazione. Ho la sensazione che si tratti di una piccola modifica, ma non sono sicuro del motivo per cui vengono visualizzate le linee di separazione?

inserisci qui la descrizione dell'immagine


Penso che il trucco sia stato impostare footerView vuoto su tableview per eliminare le righe.
Ben Sinclair

@ Andy Cosa intendi dire?
SRMR

Non utilizzare la soluzione aggiunta a questa domanda. I metodi dell'origine dati della vista tabella non devono mai fare più di quanto dovrebbero. numberOfSectionsdovrebbe restituire un conteggio e basta. Lo stesso per numberOfRowsInSection. Questi possono essere chiamati più volte in qualsiasi momento. Non aggiornare mai le visualizzazioni o aggiornare i dati o fare altro che restituire un conteggio. La logica per l'aggiornamento delle viste non deve mai essere in questi metodi.
rmaddy

Risposte:


206

Puoi ottenerlo facilmente usando la backgroundViewproprietà di UITableView.

Obiettivo 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
}

Riferimento Riferimento alla classe UITableView

backgroundView Proprietà

La vista di sfondo della vista tabella.

Dichiarazione

veloce

var backgroundView: UIView?

Objective-C

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

Discussione

La vista di sfondo di una vista tabella viene automaticamente ridimensionata per adattarsi alle dimensioni della vista tabella. Questa vista viene inserita come una vista secondaria della vista tabella dietro tutte le celle, le viste di intestazione e le viste a piè di pagina.

È necessario impostare questa proprietà su zero per impostare il colore di sfondo della vista tabella.


Grazie per la risposta! Significa che ho bisogno di una tableViewpresa per poterlo fare yourTableView.backgroundView? Sto usando un TableViewControllerquindi non ho uno sbocco per questo in questo momento, ecco perché mi chiedo.
SRMR

1
UITableViewControllerha già una proprietà denominata tableViewquindi non è necessario crearne una
Cihan Tek

Capito, utilizzoself.tableView
SRMR

1
Correzione. Dopo ulteriori test, ho dovuto fare in modo che la riga che ho menzionato restituisse lo stesso valore. numOfSections = 1. Se lo zero e la mia visualizzazione tabella è vuota, funziona, ma quando creo una cella e poi la elimino, invece di eliminare e mostrare il messaggio, si blocca con il seguente errore. *** Chiusura dell'app a causa di un'eccezione non rilevata "NSInternalInconsistencyException", motivo: "Bug interno di UITableView: impossibile generare una nuova mappa di sezione con il vecchio conteggio delle sezioni: 1 e il nuovo conteggio delle sezioni: 0". Non so perché la restituzione dello stesso valore funzioni, ma funziona e funziona come dovrebbe.
ChrisOSX

2
Non utilizzare questa soluzione. I metodi dell'origine dati della vista tabella non devono mai fare più di quanto dovrebbero. numberOfSectionsdovrebbe restituire un conteggio e basta. Lo stesso per numberOfRowsInSection. Questi possono essere chiamati più volte in qualsiasi momento. Non aggiornare mai le visualizzazioni o aggiornare i dati o fare altro che restituire un conteggio. La logica per l'aggiornamento delle viste non deve mai essere in questi metodi.
rmaddy

107

Per Xcode 8.3.2 - Swift 3.1

Ecco un modo non molto noto ma incredibilmente semplice per ottenere l'aggiunta di una vista "Nessun elemento" a una vista tabella vuota che risale a Xcode 7. Lascerò a te il controllo della logica che aggiunge / rimuove il view alla vista di sfondo della tabella, ma ecco il flusso per e Xcode (8.3.2) storyboard:

  1. Seleziona la scena nello Storyboard che ha la visualizzazione della tabella.
  2. Trascina una UIView vuota nella "Scene Dock" di quella scena

inserisci qui la descrizione dell'immagine

  1. Aggiungi un'etichetta UIL ed eventuali vincoli alla nuova vista, quindi crea un IBOutlet per quella vista

inserisci qui la descrizione dell'immagine

  1. Assegna quella vista a tableView.backgroundView

inserisci qui la descrizione dell'immagine

  1. Guarda la magia!

inserisci qui la descrizione dell'immagine

In definitiva questo funziona ogni volta che si desidera aggiungere una visualizzazione semplice al controller della visualizzazione che non si desidera necessariamente essere visualizzata immediatamente, ma che non si desidera nemmeno inserire il codice.


1
Questa tecnica funziona per tutto ciò per cui hai bisogno di una visualizzazione semplice. L'ho anche usato per intestazioni di sezioni di tabella personalizzate. Davvero, puoi usarlo per tutto ciò per cui hai bisogno di una vista. Basta fare riferimento tramite un IBOutlet e aggiungerlo come sottoview ovunque sia necessaria una visualizzazione personalizzata.
Paul Bonneville

Come ha detto @gmogames, dopo aver fatto IOS per 2 anni questa è la prima volta che si conosce lo sfondo di tableView! grazie amico
Ali Adil

1
Grazie per questo. Solo per metterlo là fuori, ho dovuto usare tableView.separatorStyle = .none e ridimensionare l'UIView predefinito per vedere backgroundView. Sto usando Xcode 9.4 con Swift 4.
Hammad Tariq

Come si posiziona la visualizzazione personalizzata?
Nol4635

1
@ Nol4635 Nel caso dello sfondo tableview, assegna semplicemente la vista che hai creato come IBOutlet allo sfondo della tableview o, se vuoi semplicemente aggiungere la vista a qualsiasi altra vista, puoi semplicemente aggiungerla come sottoview. Dovrai impostare i valori del frame, ma è come qualsiasi altra vista.
Paul Bonneville

30

Versione Swift del codice precedente: -

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
}

Ma se stai caricando le informazioni da un JSON, devi controllare se il JSON è vuoto o meno, quindi se metti un codice come questo inizialmente mostra "Nessun dato" Il messaggio poi scompare. Perché dopo che la tabella ha ricaricato i dati il ​​messaggio si nasconde. Quindi puoi inserire questo codice dove caricare i dati JSON su un array. COSÌ :-

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
    })
}

Funziona molto bene per visualizzare l'etichetta quando non ci sono dati nelle righe. Tuttavia, qual è il modo migliore per gestire quando i dati arrivano e self.tableView.reloadData()vengono chiamati? Ho scoperto che sta aggiungendo le mie nuove righe, ma noDataLabelviene ancora visualizzato sotto di esse.
tylerSF

1
Se l'array ha l'elemento appena impostato self.tableView.backgroundView = nil
Chathuranga Silva

if jobs_list.count == 0 {// add above given code} else {self.tableView.backgroundView = nil}
Chathuranga Silva,

Perfetto. l'aggiunta self.tableView.backgroundView = nilnella mia dichiarazione if prima return jobs_list.count funziona bene. grazie
tylerSF

Non utilizzare la prima soluzione in questa risposta. I metodi dell'origine dati della vista tabella non devono mai fare più di quanto dovrebbero. numberOfSectionsdovrebbe restituire un conteggio e basta. Lo stesso per numberOfRowsInSection. Questi possono essere chiamati più volte in qualsiasi momento. Non aggiornare mai le visualizzazioni o aggiornare i dati o fare altro che restituire un conteggio. La logica per l'aggiornamento delle viste non deve mai essere in questi metodi.
rmaddy

6

Puoi provare questo controllo. È abbastanza pulito. DZNEmptyDataSet

O se fossi in te, tutto ciò che farei è

  • Controlla se il tuo array di dati è vuoto
  • Se è vuoto, aggiungi un oggetto chiamato @ "Nessun dato"
  • Visualizza quella stringa in cell.textLabel.text

Vai tranquillo


5

Swift 3 (aggiornato):

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
}

Non utilizzare questa soluzione. I metodi dell'origine dati della vista tabella non devono mai fare più di quanto dovrebbero. numberOfSectionsdovrebbe restituire un conteggio e basta. Lo stesso per numberOfRowsInSection. Questi possono essere chiamati più volte in qualsiasi momento. Non aggiornare mai le visualizzazioni o aggiornare i dati o fare altro che restituire un conteggio. La logica per l'aggiornamento delle viste non deve mai essere in questi metodi.
rmaddy

Sono d'accordo. Questa soluzione può essere migliorata, ma può anche essere utilizzata.
Teodor Ciuraru

Come puoi essere d'accordo sul fatto che non dovresti usare questa soluzione ma poi affermare che può essere utilizzata anche? Questa è una contraddizione.
lunedì

Sono d'accordo che questa soluzione possa essere migliorata, ma, allo stato attuale, funzionerà anche.
Teodor Ciuraru

5

Swift3.0

Spero che serva il tuo scopo ... nel tuo 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
        }
    }
}

Classe di aiuto con funzione:

 /* 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;
        }

Non utilizzare questa soluzione. I metodi dell'origine dati della vista tabella non devono mai fare più di quanto dovrebbero. numberOfSectionsdovrebbe restituire un conteggio e basta. Lo stesso per numberOfRowsInSection. Questi possono essere chiamati più volte in qualsiasi momento. Non aggiornare mai le visualizzazioni o aggiornare i dati o fare altro che restituire un conteggio. La logica per l'aggiornamento delle viste non deve mai essere in questi metodi.
rmaddy

3

Penso che il modo più elegante per risolvere il tuo problema sia passare da UITableViewControllera a UIViewControllerche contiene a UITableView. In questo modo puoi aggiungere quello UIViewche vuoi come sottoview della vista principale.

Non consiglierei di utilizzare un UITableViewCell per fare ciò potresti dover aggiungere altre cose in futuro e le cose possono diventare rapidamente brutte.

Puoi anche fare qualcosa del genere, ma neanche questa è la soluzione migliore.

UIWindow* window = [[UIApplication sharedApplication] keyWindow];
[window addSubview: OverlayView];

Grazie per il colore attorno al quale è più elegante il modo di implementare, sempre un buon modo di pensarci. Potrei provare a cambiare il mio storyboard per utilizzare un file UIViewControllercontenente un file UITableView.
SRMR

1
Questo è il modo più a prova di futuro. Non ho mai usato un UITableViewControllerme stesso, perché usarlo non è molto più facile che farlo in un altro modo, ma limita la tua capacità di cambiare le cose in futuro.
Cihan Tek

Questo non è a prova di futuro se hai barre traslucide. Lo consiglio vivamente. Per lo meno, crea un UIViewController che contiene un UITableViewController e regola le cose in modo appropriato.
xtravar

3

Usa questo codice nel tuo numberOfSectionsInTableViewmetodo: -

if ([array count]==0
{

    UILabel *fromLabel = [[UILabel alloc]initWithFrame:CGRectMake(50, self.view.frame.size.height/2, 300, 60)];                                                                                        
    fromLabel.text =@"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];
}

1
Non utilizzare questa soluzione. I metodi dell'origine dati della vista tabella non devono mai fare più di quanto dovrebbero. numberOfSectionsdovrebbe restituire un conteggio e basta. Lo stesso per numberOfRowsInSection. Questi possono essere chiamati più volte in qualsiasi momento. Non aggiornare mai le visualizzazioni o aggiornare i dati o fare altro che restituire un conteggio. La logica per l'aggiornamento delle viste non deve mai essere in questi metodi.
rmaddy

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

2

Se non si utilizza il piè di pagina tableview e non si desidera che tableview riempia lo schermo con celle di tabella predefinite vuote, suggerirei di impostare il piè di pagina tableview su un UIView vuoto. Non conosco la sintassi corretta per farlo in obj-c o Swift, ma in Xamarin.iOS lo farei in questo modo:

public class ViewController : UIViewController
{
    UITableView _table;

    public ViewController (IntPtr handle) : base (handle)
    {
    }

    public override void ViewWillAppear(bool animated) {
        // Initialize table

        _table.TableFooterView = new UIView();
    }
}

Il codice sopra risulterà in una vista tabella senza celle vuote


2

Ecco la soluzione che ha funzionato per me.

  1. Aggiungi il codice seguente a un nuovo file.

  2. Modificare la classe della tabella nella classe personalizzata "MyTableView" dallo storyboard o .xib

(questo funzionerà solo per la prima sezione. Se vuoi personalizzare di più, apporta le modifiche nella funzione MyTableView reloadData () di conseguenza per le altre sezioni)

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
            }
        }
    }
}

Questo è un buon approccio. Ho aggiunto alcuni miglioramenti come segue per renderlo più completo. 1. Cache separator style of tableview e ripristinalo alla transizione di stato vuoto / non vuoto per rendere questa sottoclasse applicabile ai casi d'uso che si desiderano diversi stili di separatore. 2. Aggiungi @IBInspectable var emptyStateText: String?e contrassegna questa classe poiché @IBDesignablesarai in grado di modificare il testo dello stato vuoto diverso per scene diverse nello storyboard o negli xibs. Godere! :)
Egist Li

1

Vorrei presentare una vista sovrapposta che ha l'aspetto e il messaggio desiderati se la visualizzazione tabella non ha risultati. Puoi farlo in ViewDidAppear, in modo da avere i risultati prima di mostrare / non mostrare la vista.


1

Se vuoi farlo senza alcun codice, prova questo!

Fare clic su tableView.

tableView Screenshot

Cambia lo stile da "semplice" a "raggruppato".

Proprietà vista tabella screenshot-2

Ora quando usi ...

tableView.backgroundView = INSERISCI LA TUA ETICHETTA O VISUALIZZA

Non mostrerà i separatori!


1

Aggiungi questo codice in un file e modifica il tipo di raccolta in 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
  }
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.