Tableview 选择将我的按钮隐藏在 tableview 单元格中

Tableview selection hides my button within the tableview cell

还有另一个具有相同逻辑的问题。UITableViewCell subview disappears when cell is selected 我没有得到正确的解决方案,我 want.They 建议将视图子类化 that.But 我需要在单元格本身内显示按钮。

让我们来回答我的问题:

我有一个以编程方式创建的自定义表格视图。

请看截图。

在此我以编程方式将按钮添加到表格视图单元格。

让我们来解决问题。

当我 select 任何单元格时它也会隐藏按钮,我想看到那个按钮。

我的代码在这里:

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


    var cell:UITableViewCell = tableView.dequeueReusableCellWithIdentifier("cell") as! UITableViewCell

    // here is the redbutton

           var redBtn = UIButton()
       redBtn = UIButton(frame: CGRectMake(0, 0, 40, 40))
       redBtn.backgroundColor = UIColor.redColor()
        cell.addSubview(redBtn)

    //label text just added from an array

     cell.textLabel?.textAlignment = NSTextAlignment.Center
     cell.textLabel?.text = items[indexPath.row]

     return cell

}

如果需要:Tableview 创建代码:

       var tableView: UITableView  =   UITableView()

      override func viewDidLoad() {
       super.viewDidLoad()
    tableView.frame         =   CGRectMake(0, 50, self.view.frame.width,self.view.frame.height);
    tableView.delegate      =   self
    tableView.dataSource  =  self
tableView.estimatedRowHeight = 30
 tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "cell")

    self.view.addSubview(tableView)



}

提前致谢。

因为当您 select 时,UITableView 会更改单元格中子视图的背景颜色。在您的情况下,它将红色按钮的颜色更改为与 selection 线(灰色)相同的颜色。

您可以在此处查看解决方案: UITableViewCell subview disappears when cell is selected

你应该永远不要使用cell.addSubview(aSubview)。相反,您应该使用 cell.contentView.addSubview(aSubview)。不能说这 100% 是您的问题,但它可能是。

来自 UITableViewCell 文档:

If you want to customize cells by simply adding additional views, you should add them to the content view so they will be positioned appropriately as the cell transitions into and out of editing mode.

https://developer.apple.com/library/ios/documentation/UIKit/Reference/UITableViewCell_Class/#//apple_ref/occ/instp/UITableViewCell/contentView

仔细阅读文档,似乎 UITableViewCell 在突出显示或选择视图时更改了视图的背景颜色。试试这个:

覆盖 setSelected(_ selected: Bool, animated animated: Bool)setHighlighted(_ highlighted: Bool, animated animated: Bool)。在那里重新设置你的按钮背景颜色,不要忘记调用 super.

您可以添加自定义按钮:

class NoHighlightButton: UIButton {

    override var backgroundColor: UIColor? {
        get {
            return super.backgroundColor
        }
        set {
            if newValue != UIColor.clearColor() {
                super.backgroundColor = newValue
            }
        }
    }
}

这是一个解决方案。给按钮一个标签号。

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


var cell:UITableViewCell = tableView.dequeueReusableCellWithIdentifier("cell") as! UITableViewCell

// here is the redbutton

       var redBtn = UIButton()
   redBtn = UIButton(frame: CGRectMake(0, 0, 40, 40))
   redBtn.backgroundColor = UIColor.redColor()
     cell.contentView.addSubview(redBtn)
   redBtn.tag = 101
//label text just added from an array

 cell.textLabel?.textAlignment = NSTextAlignment.Center
 cell.textLabel?.text = items[indexPath.row]

 return cell
}

现在在 didSelectRowAt Index 方法中添加这个。

func tableView(tableView: UITableView!, didSelectRowAtIndexPath indexPath: NSIndexPath!) {

    var selectedCell = tableView.cellForRowAtIndexPath(indexPath) as UITableViewCell!

    for subViews in selectedCell.contentView.subviews {

        if subViews is UIButton && subViews.tag == 101 {
            let button = subViews as! UIButton
            selectedCell.bringSubviewToFront(button)
            button.backgroundColor = UIColor.redColor()
        }
    }
}

只需将这些代码添加到您的 cellForRow:

cell.selectionStyle = .none