所以我正在制作这个待办事项列表应用程序。 这个应用程序有本地通知,但我只希望它们弹出如果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()
}
}
任何可以帮助我的人? 谢谢;)
答案 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
,它几乎是相同的代码,留给读者练习。