【问题标题】:Swift : How can I fill the cell when the data is empty?Swift:数据为空时如何填充单元格?
【发布时间】:2016-10-26 10:36:54
【问题描述】:

我正在使用表格视图。有时我的数据会出错,因为它是空数据。当我得到空数据时,我想返回 1 个或多个单元格并显示空数据信息文本,例如“没有可用数据!”。

代码:

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    var a:Int = 0

        if segmentControl.selectedIndex == 0 {
            a = 8
            return a
        }else if segmentControl.selectedIndex == 1{
            a = 4
            return a
        }else if segmentControl.selectedIndex == 2{
            a =  2
            return a
        }else if segmentControl.selectedIndex == 3{
            a = 1
            return a
        }

    return a
}

然后为0,所有数据为空。我正在尝试返回单元格,我在 cellForRowAtIndexPath 中使用此代码:

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("knockoutsCell", forIndexPath: indexPath) as! KnockoutsTableViewCell

    let item = knockoutsTableArray[indexPath.row]
    if knockoutsTableArray.count == 0{
        cell.dateLabel.text = "Date"
        cell.homeImage.image = UIImage(named: "imagePic.png")
        cell.homeLabel.text = "Empty data!"

    }else{
    if item.playing == true{
        cell.dateLabel.text = item.date
        cell.homeImage.image = UIImage(named: "\(item.homeName)")
    }
    }

    return cell
}

感谢 Sethmr,我找到了解决方案并做到了。这是我的工作代码:

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

    if knockoutsTableArray.count != 0 {
        return knockoutsTableArray.count
    } else{
        if segmentControl.selectedIndex == 0{
            return 8
        }else if segmentControl.selectedIndex == 1{
            return 4
        }else if segmentControl.selectedIndex == 2{
            return 2
        }else{
            return 1
        }
    }
}

我还从顶部移动了cellForRowAtIndexPath 中的item 值,它工作正常。我在它不为空时调用了该项目。

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("knockoutsCell", forIndexPath: indexPath) as! KnockoutsTableViewCell

    if knockoutsTableArray.count == 0{
        cell.dateLabel.text = "Date"
        cell.homeImage.image = UIImage(named: "imagePic.png")
        cell.homeLabel.text = "Empty data!"

    }else{
    let item = knockoutsTableArray[indexPath.row]
    if item.playing == true{
        cell.dateLabel.text = item.date
        cell.homeImage.image = UIImage(named: "\(item.homeName)")
    }
    }

    return cell
}

【问题讨论】:

  • 不明白你的问题到底出在哪里?
  • 当我的数据计数为零时,我正在尝试手动返回单元格的编号并返回代码上方的数据。但它不起作用。我想我不能那样做。
  • 我没有看到您尝试手动返回单元格编号的代码。我只看到检查数据是否为空数组,而不是用空数据内容填充它。

标签: ios xcode swift tableview tableviewcell


【解决方案1】:

为了便于阅读,我非常喜欢 switch 语句而不是 if else。

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    switch segmentControl.selectedIndex {
    case 0:
        if knockoutArray.count != 0 {
             return knockoutArray.count
        } else {
             return 1
        } 
    case 1:
        return 4
    case 2:
        return 2
    case 3:
        return 1
    default:
        print("error with selectedIndex")
        return 0
    }
}

如果所有行都是空的,那是因为以下原因之一: 您的 segmentControl.selectedIndex = -1 因为它本身都未被选中或分段控制器为零。 在这种情况发生变化的时间点之后,您可能没有调用 tableView.reloadData()。

向我展示所有 cellForRowAtIndexPath、有关 myArray 的更多信息以及您认为可能有帮助的任何其他信息,我会看看我能做些什么。

【讨论】:

  • 我编辑了我的问题。我可以在没有数组的单元格中添加值吗?
  • 我马上看到的一件事,删除这行“knockoutsTableView.reloadData()”。永远不要从 cellForRowAtIndexPath 内部调用 tableView.reloadData()。这往往会导致无限循环。
  • 哦对不起我的错误。
  • 如果我可能会问,你为什么使用 segmentControl.selectedIndex 来确定单元格的数量,但使用数组来填充单元格的值。
  • 我正在使用自定义分段控件来跳转其他一些数据。因此,knockoutsTableArray 正在发生变化。但是有些数组是空的。我想在数组为空时填充单元格。
【解决方案2】:
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    switch segmentControl.selectedIndex {
    case 0:
        if knockoutsTableArray.count != 0 {
            return knockoutsTableArray.count
        } else {
            return 1
        } 
    case 1:
        if knockoutsTableArray.count != 0 {
            return 4
        } else {
            return 8
        } 
    case 2:
        return 2
    case 3:
        return 1
    default:
        print("error with selectedIndex")
        return 0
    }
}  

这似乎是你想要的。

【讨论】:

  • 哦,您的代码有效!但是在 0 之后,所有数据都是空的。例如;当我设置第二个分段视图时,如果它是空的,我想返回 8。如何为分段控制做到这一点?
  • 是的,我正在编写工作代码。但是我没有使用 switch 语句 :) 我现在明白了。感谢所有帮助。你是最棒的! :) 我也在编辑我的工作代码。
猜你喜欢
  • 2018-07-08
  • 1970-01-01
  • 2015-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-15
相关资源
最近更新 更多