xcode 表格视图为空时如何显示标签

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/24937951/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-15 05:15:56  来源:igfitidea点击:

How to display label when table view is empty

xcodeswift

提问by user3746428

I am trying to figure out how to display a message within a table view when the table is empty. I would like it to say something like: "You haven't added any transactions yet. Tap the add button to get started.". Obviously I would need it to revert back to this message if the user deletes all of the cells, too.

我试图弄清楚如何在表格为空时在表格视图中显示消息。我希望它可以这样说:“您还没有添加任何交易。点击添加按钮开始。”。显然,如果用户也删除了所有单元格,我将需要它恢复到此消息。

This is the code that I currently have in my table view controller:

这是我当前在表视图控制器中的代码:

class ThirdViewController: UITableViewController {

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

override func viewDidLoad() {
    super.viewDidLoad()

    // Uncomment the following line to preserve selection between presentations
    // self.clearsSelectionOnViewWillAppear = false

    // Uncomment the following line to display an Edit button in the navigation bar for this view controller.
    // self.navigationItem.rightBarButtonItem = self.editButtonItem
}

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

// #pragma mark - Table view data source

override func numberOfSectionsInTableView(tableView: UITableView?) -> Int {
    // #warning Potentially incomplete method implementation.
    // Return the number of sections.
    return 1
}

override func tableView(tableView: UITableView?, numberOfRowsInSection section: Int) -> Int {
    // #warning Incomplete method implementation.
    // Return the number of rows in the section.
    return arrayObject.paymentsArray().count
}


override func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell! {
    var cell:CustomTransactionTableViewCell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as CustomTransactionTableViewCell
    cell.paymentNameLabel.text = (arrayObject.paymentsArray().objectAtIndex(indexPath.row)) as String
    cell.costLabel.text = (arrayObject.costArray().objectAtIndex(indexPath.row)) as String
    cell.dateLabel.text = (arrayObject.dateArray().objectAtIndex(indexPath.row)) as String

    if arrayObject.imageArray().objectAtIndex(indexPath.row) as NSObject == 0 {
        cell.paymentArrowImage.hidden = false
        cell.creditArrowImage.hidden = true
    } else if arrayObject.imageArray().objectAtIndex(indexPath.row) as NSObject == 1 {
        cell.creditArrowImage.hidden = false
        cell.paymentArrowImage.hidden = true
    }

    return cell
}

override func tableView(tableView: UITableView!, canEditRowAtIndexPath indexPath: NSIndexPath!) -> Bool {
    return true
}

override func tableView(tableView: UITableView!, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath!) {
    if (editingStyle == UITableViewCellEditingStyle.Delete) {

        if let tv=tableView {
            arrayDataCost.removeObjectAtIndex(indexPath!.row)
            arrayDataImage.removeObjectAtIndex(indexPath!.row)
            arrayDataPayments.removeObjectAtIndex(indexPath!.row)
            arrayDataDate.removeObjectAtIndex(indexPath!.row)
            tv.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Fade)
        }
    }
}
}

Any help would be much appreciated!

任何帮助将非常感激!

回答by Putt Potsawee

You might want to set the backgroundView to a UILabel (Or some view you made when the table is empty

您可能希望将 backgroundView 设置为 UILabel (或者您在表为空时制作的某些视图

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    if self.numberOfRow == 0{
        var emptyLabel = UILabel(frame: CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height))
        emptyLabel.text = "No Data"
        emptyLabel.textAlignment = NSTextAlignment.Center
        self.tableView.backgroundView = emptyLabel
        self.tableView.separatorStyle = UITableViewCellSeparatorStyle.None
        return 0
    } else {
        return self.numberOfRow
    }
}

something like this works fine for me

像这样的东西对我来说很好用

回答by Sanjay Mali

func numberOfSectionsInTableView(tableView: UITableView) -> Int {
       var numOfSection: NSInteger = 0
        if array.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
  }

回答by Shamsiddin

Override your viewDidLoad()method like this:

viewDidLoad()像这样覆盖你的方法:

override func viewDidLoad() {
    super.viewDidLoad()

    self.view.addSubview(self.yourLabel);

    if arrayObject.paymentsArray().count > 0 {
         self.tableView.hidden = NO;
         self.yourLabel.hidden = YES;
    } else {
         self.tableView.hidden = YES;
         self.yourLabel.hidden = NO;
    }
}

回答by user3871275

You can either hide the tableView and unhide the label, or display some sort of animation that reduces the alpha of one of the views for a 'fade' effect.

您可以隐藏 tableView 并取消隐藏标签,也可以显示某种动画来降低其中一个视图的 alpha 以实现“淡入淡出”效果。

回答by J.Arji

You can use this method. No function limit

您可以使用此方法。无功能限制

Swift3

斯威夫特3

    if tableView.visibleCells.isEmpty{
            //tableview is not data 
           print("can not found data")
     }else{
         //do somethings

    }

回答by tuyen le

I needed to achieve the same thing. This is what i did.

我需要实现同样的目标。这就是我所做的。

var label: UILabel {
    let label = UILabel(frame: tableView.bounds)
    label.text = "empty"
    return label
}

override func viewDidLoad() {
    tableView.backgroundView = UIView(frame: tableView.bounds)
    tableView.backgroundView?.addSubview(noPlacesMessageLabel)
}