Swift允许扩展除一个以外的所有细胞?

时间:2015-06-01 19:44:26

标签: ios uitableview swift

我有一个填充了数据的tableView,当我点击该行时,我的所有单元格当前都可以展开/折叠。

但是,我的UITableView中的最后一个单元格是一种不同类型的数据,在点击时它不应该是可扩展的。

我已经设置好了,所以一次只能扩展一个单元格,所以如果另一个单元格当前已经扩展,并且他们点击UITableView中的最后一个单元格,那个单元格仍应该崩溃,但最后一个单元格不应该展开

我正在检查它是否是不可扩展的最后一个单元格的方法是检查其中一个标签:if cell.tickerLabel.text == " CASH"

我可以验证的是正确的,并且if语句运行最后一个单元格。

我尝试了很多不同的实现,将if语句插入到我的代码中,我展开并折叠我的单元格。但是我所尝试的一切都没有按预期发挥作用。

以下是扩展/折叠单元格的代码:

我的didSelectRowAtIndexPath函数     func tableView(tableView:UITableView,didSelectRowAtIndexPath indexPath:NSIndexPath){         让cell = tableView.dequeueReusableCellWithIdentifier(“com.Stocks.portfolioCell”,forIndexPath:indexPath)为! portfolioCell

    if let selectedCellIndexPath = selectedCellIndexPath {
        if selectedCellIndexPath == indexPath {
            self.selectedCellIndexPath = nil
            currentCollapsing = true
            tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: .None)
        } else {
            lastCollapsing = true
            self.selectedCellIndexPath = indexPath
            tableView.reloadRowsAtIndexPaths([lastIndexPath], withRowAnimation: .None)
            tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: .None)
            self.lastIndexPath = indexPath
        }
    } else {
        selectedCellIndexPath = indexPath
        self.lastIndexPath = indexPath
        tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.None)
    }
    tableView.beginUpdates()
    tableView.endUpdates()
}

我的heightForRowAtIndexPath函数

func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
    let SelectedCellHeight: CGFloat = 210
    let UnselectedCellHeight: CGFloat = 50
    if let selectedCellIndexPath = selectedCellIndexPath {
        if selectedCellIndexPath == indexPath {
            return SelectedCellHeight
        }
    }
    return UnselectedCellHeight
}

最后,我的cellForRowAtIndePath函数中与此问题相关的部分:

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

    cell.heightSeperator.hidden = true
    cell.stockNameView.hidden = true
    cell.purchasePriceView.hidden = true
    cell.lastPriceView.hidden = true
    cell.daysHeldView.hidden = true
    cell.endSeperator.hidden = true

    if indexPath.row % 2 == 0 {
        cell.backgroundColor = UIColor.formulaWhiteColor()
    } else {
        cell.backgroundColor = UIColor.whiteColor()
    }


    if selectedCellIndexPath == indexPath {
        cell.tickerLabel.textColor = UIColor.formulaBlueColor()
        cell.heightSeperator.hidden = false
        cell.stockNameView.hidden = false
        cell.purchasePriceView.hidden = false
        cell.lastPriceView.hidden = false
        cell.daysHeldView.hidden = false
        cell.endSeperator.hidden = false
        tableHeight.constant = tableHeight.constant+210
        self.scrollView.contentSize = CGSize(width:self.view.bounds.width, height: self.contentView.frame.height)
        self.view.setNeedsDisplay()
    }

    if lastCollapsing == true || currentCollapsing == true {
        lastCollapsing = false
        currentCollapsing = false
        tableHeight.constant = tableHeight.constant-210
        self.scrollView.contentSize = CGSize(width:self.view.bounds.width, height: self.contentView.frame.height)
        self.view.setNeedsDisplay()
    }
}

任何人都可以帮我指明正确的方向,这样我的最后一个细胞是不可扩展的,同时仍然允许任何其他开放细胞在敲击它时崩溃?

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

您应该检查indexPath是否是heightForRow内的最后一个。

由于您可以选择最后一行,逻辑将识别出最后一行被选中,并且在计算它的高度时,它将计算为好像被选中(它是)。所以你应该通过在heightForRow委托方法中处理它来避免扩展最后一行。

更新

func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
    let SelectedCellHeight: CGFloat = 210
    let UnselectedCellHeight: CGFloat = 50

    //Add this here, where numberOfRows is self explanatory
    //So replace it with the actually variable.
    if indexPath.row == numberOfRows - 1 {
        return UnselectedCellHeight;
    }

    if let selectedCellIndexPath = selectedCellIndexPath {
        if selectedCellIndexPath == indexPath {
            return SelectedCellHeight
        }
    }
    return UnselectedCellHeight
}