自定义 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)
}
为您的按钮编写自定义函数,例如(使用按钮作为发件人)
您的按钮功能:
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 单元格突出显示。
如果单元格中的外部按钮或按钮起作用,这足以使单元格突出显示。
希望对大家有所帮助。
我有一个自定义表格视图。
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)
}
为您的按钮编写自定义函数,例如(使用按钮作为发件人)
您的按钮功能:
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 单元格突出显示。
如果单元格中的外部按钮或按钮起作用,这足以使单元格突出显示。
希望对大家有所帮助。