根据nil变量

时间:2015-07-15 22:07:21

标签: ios swift uitableview

这是this问题的一个延续,但基本上我试图找出如果函数的结果为零,我怎么能不返回单元格。

这是我的代码:

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    var cell = tableView.dequeueReusableCellWithIdentifier("rideCell", forIndexPath: indexPath) as! RideCell

    var ride = DataManager.sharedInstance.getRideByName(favouritesArray[indexPath.row] as! String)
    println(ride)

    if ride != nil {
        cell.rideNameLabel.text = ride!.name

        var dateFormat = NSDateFormatter()
        dateFormat.dateFormat = "h:mm a"
        cell.updatedLabel.text = dateFormat.stringFromDate(ride!.updated!)

        if ride!.waitTime! == "Closed" {
            cell.waitTimeLabel.text = ride!.waitTime!
        } else {
            cell.waitTimeLabel.text = "\(ride!.waitTime!)m"
        }
    }

    return cell
}

所以目前一切正常,但无论ride在哪里等于零,我只是返回原型单元格,而我希望它不返回任何内容。

我试图将这些细胞的高度隐藏或改为零,但它看起来似乎是凌乱的解决方案。谁知道更好的?

感谢。

3 个答案:

答案 0 :(得分:0)

假设您始终知道您有多少有效行,并通过实施UITableViewDataSource的tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int方法发布此数字。因此,如果在某个时刻行数发生变化,您应该调用UITableView.reloadData不要试图隐藏多余的行。

要获得一系列有效的游乐设施,请尝试以下方法:

var newArray:[String] = []
for str in favouritesArray where DataManager.sharedInstance.getRideByName(str!) != nil
{
    newArray += [str]
}

答案 1 :(得分:0)

通过实施tableView(_ tableView: UITableView, numberOfRowsInSection section: Int)

确定行数
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) {
    if section == 0 {
        return arrayName.count
    }
    return 0
}

答案 2 :(得分:0)

我找到了解决方案。正如一些人提到的那样,在处理cellForRowAtIndexPath之前,我必须弄清楚要显示什么。

基本上我添加了一些代码来确定哪些收藏夹可以在数组中找到并放在viewWillAppear中。

    for index in 0...favouritesArray.count - 1 {
        var ride = DataManager.sharedInstance.getRideByName(favouritesArray[index] as! String)

        if ride != nil {
            favouritesFound.append(ride!.name!)
            println(favouritesFound)
        }
    }

现在完美运作!谢谢大家。