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

时间:2015-05-28 09:14:44

标签: uitableview swift selection custom-cell

还有另一个问题具有相同的逻辑。UITableViewCell subview disappears when cell is selected我没有得到我想要的正确解决方案。他们建议像这样继承视图。但是我需要在单元格内部显示按钮。

让我来问我的问题:

我有一个自定义的,以编程方式创建的tableview。

请查看截图。

enter image description here

在此我以编程方式添加按钮到tableview单元格。

让我们来解决问题。

enter image description here

当我选择任何单元格时,它也会隐藏按钮,我想要看到该按钮。

我的代码在这里:

     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)



}

提前致谢。

6 个答案:

答案 0 :(得分:2)

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

 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
}

现在在didSelectRowAtIndex方法中添加此内容。

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()
        }
    }
}

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

稍微阅读一下文档,setSelected(_ selected: Bool, animated animated: Bool)会在突出显示或选择视图时更改视图的背景颜色。试试这个:

覆盖setHighlighted(_ highlighted: Bool, animated animated: Bool)super。在那里重新设置按钮背景颜色,不要忘记拨打nunique

答案 3 :(得分:1)

您可以添加自定义按钮:

class NoHighlightButton: UIButton {

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

答案 4 :(得分:0)

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

来自UITableViewCell文档:

  

如果您想通过简单地添加其他视图来自定义单元格,则应将它们添加到内容视图中,以便在单元格进入和退出编辑模式时将它们正确定位。

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

答案 5 :(得分:0)

只需在您的 cellForRow 中添加这些代码:

cell.selectionStyle = .none