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.
仔细阅读文档,似乎 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
还有另一个具有相同逻辑的问题。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.
仔细阅读文档,似乎 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