自定义 tableview 单元格 - 需要选择单元格甚至按下单元格中的自定义按钮

Custom tableview cell - Need to getting selected the cell even press a custom button in the cell

我有一个自定义表格视图。

class CustomCell: UITableViewCell {

var firstBtn  : UIButton!
var secondBtn : UIButton!

override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
    super.init(style: style, reuseIdentifier: reuseIdentifier)

    // button frame coding
    self.contentView.addSubview(firstBtn)
    self.contentView.addSubview(secondBtn)
}

在视图控制器中,我以编程方式创建了表视图。

colorTableView.frame = CGRectMake(20,50,100, 200)
colorTableView.delegate = self
colorTableView.dataSource = self
colorView.addSubview(colorTableView)

问题是当 select 一个单元格突出显示为灰色 color.But 当我在同一个单元格中按下按钮时突出显示颜色 disappears.So 我无法找到哪个单元格是 selected.

我需要留在 select 单元格直到转到下一个单元格。

我尝试通过如下手动设置背景颜色来修复它,但效果并不如我所愿。

Cell?.contentView.backgroundColor = UIColor.lightGrayColor()
Cell?.textLabel?.backgroundColor = UIColor.clearColor()

Cellforindexpath

           func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    var cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! CustomCell


            cell.contentView.addSubview(cell.firstbutton)

        cell.firstbutton.addTarget(self, action: "buttonpress:", forControlEvents: UIControlEvents.TouchUpInside)
       }
  1. 为您的按钮编写自定义函数,例如(使用按钮作为发件人)

  2. 您的按钮功能:

    func buttonpress(sender: UIButton) {
    // get the cell and table
        var cell: UITableViewCell = sender.superview.superview as UITableViewCell
        var tableView: UITableView = cell.superview as UITableView
        let rowToSelectIndexPath = tableView.indexPathForCell(cell)
        tableView.selectRowAtIndexPath(rowToSelectIndexPath, animated: true, scrollPosition:UITableViewScrollPosition.None)
    }
    

这是一个解决方案。

创建一个变量,例如 - var currentSelectedIndex: NSIndexPath!

func tableView(tableView: UITableView!, didSelectRowAtIndexPath indexPath: NSIndexPath!) {
      if self.currentSelectedIndex != indexPath {
            let previosSelectedCell = tableView.cellForRowAtIndexPath(self.currentSelectedIndex) as! UITableViewCell
            selectedCell.backgroundColor = UIColor.clearColor()
            self.currentSelectedIndex = indexPath
            let selectedCell = tableView.cellForRowAtIndexPath(indexPath) as! UITableViewCell
            selectedCell.backgroundColor = UIColor.redColor()
        }
}

我认为你不应该依赖于选定的行索引,你只需使用按钮的标签 属性 来找出特定的发件人。

在上帝的恩典下,我终于得到了解决方案。

第一步:存储 selected 行的索引路径

   func tableView(tableView: UITableView, willSelectRowAtIndexPath indexPath: NSIndexPath) -> NSIndexPath? {
    println("row selected")
    GetIndexOfRow = indexPath

    return GetIndexOfRow
}

然后在cellForAtIndexPath方法中:

          if getIndexpathOfRow != nil {
        if indexPath ==  getIndexpathOfRow {
            cell.contentView.backgroundColor = UIColor(white: 0.85, alpha: 1)
            cell.textLabel?.backgroundColor = UIColor(white: 0.85, alpha: 1)

        }else {
            cell.contentView.backgroundColor = UIColor.whiteColor()
            cell.textLabel?.backgroundColor = UIColor.whiteColor()
        }

    }

这些给出了 selection of row with light gray color as default selection color of tableview cell.

      for view in self.view.subviews {
        for each in view.subviews {

            if each.isKindOfClass(UITableView){
                var getTableview = each as! UITableView

                for (var j = 0; j < getTableview.numberOfSections(); ++j)
                {
                    for (var i = 0; i < getTableview.numberOfRowsInSection(j); ++i)
                    {

                                                                                var cells =  getTableview.cellForRowAtIndexPath(NSIndexPath(forRow: i, inSection: j))

                        if cells?.textLabel?.backgroundColor  == UIColor(white: 0.85, alpha: 1.0) {
                        cells?.contentView.backgroundColor = UIColor.whiteColor()
                        cells?.textLabel?.backgroundColor = UIColor.whiteColor()
                        }



                    }
                }


            }
        }


    }

上面的代码作为 follows.When 我们 select 一行检查可见单元格背景单元格 color.If 任何其他单元格有颜色 means.Changed 清除颜色(在我的情况是白色。所以我们只能看到 selected 单元格突出显示。

如果单元格中的外部按钮或按钮起作用,这足以使单元格突出显示。

希望对大家有所帮助。