2016-04-27 2 views
0

Так что я делаю это приложение ToDo-list. Это приложение имеет локальные уведомления, но я хочу, чтобы они всплывали, если tableview пуст. Чтобы это было коротко: как проверить, пустое ли табличное представление?Swift - Как проверить, нет ли TableView пустым

Это мой текущий код:

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

} 

Любой, кто может мне помочь? Спасибо;)

+4

Вы не проверить, если вид таблица пуста. Вы проверяете, есть ли в вашем источнике данных какие-либо данные. – rmaddy

ответ

2

В Swift 3:

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

Отличный простой ответ! – user7097242

5

Вы должны проверить значение taskMgr.tasks.count.

+0

Спасибо за оперативную реакцию, и это работает! Спасибо – Jenoah

+0

@Jenoah Не забудьте принять ответ, который наилучшим образом решил вашу проблему. – 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

.. если TableView пуст.

Существует булевское свойство с тем же именем, которое вызывается в массиве источников данных.

Это true, если массив не содержит элементов.

taskMgr.tasks.isEmpty 
0

Как уже упоминалось в других ответах, лучший способ - проверить количество ваших данных. Но если вы хотите, чтобы проверить с любым другим способом, вы можете использовать:

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; 
} 
Смежные вопросы