还有另一个问题具有相同的逻辑。UITableViewCell subview disappears when cell is selected我没有得到我想要的正确解决方案。他们建议像这样继承视图。但是我需要在单元格内部显示按钮。
让我来问我的问题:
我有一个自定义的,以编程方式创建的tableview。
请查看截图。
在此我以编程方式添加按钮到tableview单元格。
让我们来解决问题。
当我选择任何单元格时,它也会隐藏按钮,我想要看到该按钮。
我的代码在这里:
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)
}
提前致谢。
答案 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文档:
如果您想通过简单地添加其他视图来自定义单元格,则应将它们添加到内容视图中,以便在单元格进入和退出编辑模式时将它们正确定位。
答案 5 :(得分:0)
只需在您的 cellForRow
中添加这些代码:
cell.selectionStyle = .none