2016-04-27 17 views
0

Also mache ich diese ToDo-Liste App. Diese App hat lokale Benachrichtigungen, aber ich möchte nur, dass sie auftauchen, wenn die Tabellenansicht leer ist. Um es kurz zu halten: Wie überprüfe ich, ob die Tabellenansicht leer ist?Swift - Wie überprüft man, ob TableView leer ist

Dies ist mein aktueller Code:

import UIKit 

class FirstViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { 


@IBOutlet var tblTasks : UITableView! 
@IBOutlet weak var countLbl: UILabel! 
var localNotification = UILocalNotification() 

//For persisting data 
let defaults = NSUserDefaults.standardUserDefaults() 

override func viewDidLoad() { 
    super.viewDidLoad() 
    self.tblTasks.reloadData() 


    // localNotification.alertAction = "Je hebt nog taken die gedaan moeten worden!" 
    localNotification.alertBody = "Je hebt nog taken die gedaan moeten worden! Namelijk nog \(updateCount)" 
    localNotification.timeZone = NSTimeZone.localTimeZone() 

    localNotification.fireDate = NSDate(timeIntervalSinceNow: 10) 
    UIApplication.sharedApplication().scheduleLocalNotification(localNotification) 

} 

override func viewWillAppear(animated: Bool) { 
    self.tblTasks.reloadData() 
} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 


func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int{ 
    return taskMgr.tasks.count 

} 

//Define how our cells look - 2 lines a heading and a subtitle 
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell{ 
    let cell: UITableViewCell = UITableViewCell(style: UITableViewCellStyle.Subtitle, reuseIdentifier: "Default Tasks") 

    //Assign the contents of our var "items" to the textLabel of each cell 
    cell.textLabel!.text = taskMgr.tasks[indexPath.row].name 
    cell.detailTextLabel!.text = taskMgr.tasks[indexPath.row].description 
    cell.backgroundColor = UIColor.clearColor() 

    return cell 

} 

func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath){ 

    if (editingStyle == UITableViewCellEditingStyle.Delete){ 

     taskMgr.removeTask(indexPath.row) 
     tblTasks.reloadData() 
    } 

} 

Wer kann mir helfen? Danke;)

+4

Sie überprüfen nicht, ob die Tabellenansicht leer. Sie überprüfen, ob in Ihrer Datenquelle Daten enthalten sind. – rmaddy

Antwort

2

In Swift 3:

if tableView.visibleCells.isEmpty { 
    //tableView is empty. You can set a backgroundView for it. 
} else { 
    //do something 
} 
+0

Große einfache Antwort! – user7097242

5

Sie sollten taskMgr.tasks.count Wert überprüfen.

+0

Danke für die schnelle Reaktion und es funktioniert! Danke – Jenoah

+0

@Jenoah Vergessen Sie nicht, die Antwort zu akzeptieren, die Ihr Problem am besten gelöst hat. – rmaddy

2
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int{ 
    if taskMgr.tasks.count == 0 { 
     //table view is empty here 
    } 
    return taskMgr.tasks.count  
} 
1

.. wenn Tableview leer ist.

Es gibt eine boolesche Eigenschaft mit demselben Namen, die im Datenquellenarray aufgerufen werden soll.

Es ist true, wenn das Array keine Elemente enthält.

taskMgr.tasks.isEmpty 
0

Wie in anderen Antworten erwähnt, ist der beste Weg, mit der Zählung Ihrer Daten zu überprüfen. Aber wenn Sie mit irgendeiner anderen Art und Weise überprüfen möchten, können Sie:

if tableView.visibleCells.count == 0 { 
     // tableView is empty. You can set a backgroundView for it. 
     let label = UILabel(frame: CGRectMake(0, 0, tableView.bounds.size.width, tableView.bounds.size.height)) 
     label.text = "No Data" 
     label.textColor = UIColor.blackColor(); 
     label.TextAlignment = .Center 
     label.sizeToFit() 
     tableView.backgroundView = label; 
     tableView.separatorStyle = .None; 
} 
Verwandte Themen