Swift - 如何检查TableView是否为空

时间:2016-04-27 15:32:41

标签: ios swift uitableview tableview

所以我正在制作这个待办事项列表应用程序。 这个应用程序有本地通知,但我只希望它们弹出如果tableview为空。保持简短:如何检查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()
    }

}

任何可以帮助我的人? 谢谢;)

6 个答案:

答案 0 :(得分:13)

在Swift 3中:

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

答案 1 :(得分:5)

您应该检查taskMgr.tasks.count值。

答案 2 :(得分:2)

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

答案 3 :(得分:1)

  

..如果TableView 为空

在数据源数组上调用一个具有相同名称的布尔属性。

如果数组不包含任何元素,则为true

taskMgr.tasks.isEmpty

答案 4 :(得分: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;
}

答案 5 :(得分:0)

由于查询visibleCellsìndexPathsForVisibleCells可能是不安全的,因此,这是我仅使用数据源的方法。作为UICollectionView的扩展名:

import UIKit.UICollectionView

public extension UICollectionView {

    /// Returns true, if there are no items. False, otherwise.
    @inlinable var CC_isEmpty: Bool {
        guard let dataSource = self.dataSource else { return true }
        // Ideally we'd just inspect the visibleCells, but if we're checking in the false moment,
        // UICollectionView will complain about us checking while updating, so we better directly
        // refer to the data source. Unfortunately, `UICollectionView` does not have an API for `isEmpty()`.
        guard let numberOfSections = dataSource.numberOfSections?(in: self), numberOfSections > 0 else { return true }
        for section in 0..<numberOfSections {
            let entriesPerSection = dataSource.collectionView(self, numberOfItemsInSection: section)
            if entriesPerSection > 0 {
                return false
            }
        }
        return true
    }

}
UICollectionView+Emptyness.swift (END)

对于UITableView,它几​​乎是相同的代码,留给读者练习。