仅将 IBAction 应用于单个单元格

Apply an IBAction only to a single cell

我有一个带有原型单元格的 tableView;有了这个 func 我设置单元格高度

override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat
    {
        return cellHeight
    }

使用此 action 我更改了 UIButton 内部的单元格高度

@IBAction func changeCellHeight(sender: UIButton)
    {
        if cellHeight == 44
        {
            cellHeight = 88
        } else {
            cellHeight = 44
        }
        tableView.beginUpdates()
        tableView.endUpdates()
    }

现在我只需要为选定的单元格(而不是每个单元格)更改高度;所以我定义 var index: NSIndexPath! 我实现了这个 func

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath)
    {
        index = self.tableView.indexPathForSelectedRow()!
        println("Cella " + "\(index)")
    }

正如我在控制台中预期的那样 Xcode 打印选定的单元格 (<NSIndexPath: 0xc000000000000016> {length = 2, path = 0 - 0})。

所以我的麻烦是如何在IBAction.

中使用var index

提前致谢。

要根据选择更改您的高度,如果您已经在实施 didSelectRowAtIndexPath 方法,则不需要 IBAction。

首先对您的 didSelectRowAtIndexPath 方法稍作改动-

func tableView(tableView: UITableView!, didSelectRowAtIndexPath indexPath: NSIndexPath!) { 
   // You don't need to do this -> index=self.tableView.indexPathForSelectedRow()!
   index = indexPath;
   println("Cella " + "\(index)")

   tableView.beginUpdates()
   tableView.endUpdates()
}

然后对您的 heightForRowAtIndexPath 方法稍作改动-

override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat
    {
       if index == indexPath {
            return 88
        }
       else{
           return 44
       }
    }