更改所选 UITableViewCell 的背景颜色
Posted
技术标签:
【中文标题】更改所选 UITableViewCell 的背景颜色【英文标题】:Change background color of selected UITableViewCell 【发布时间】:2015-11-01 16:17:52 【问题描述】:单击时我试图更改单元格的背景。 类似于css的hover或者focus,怎么办?
// NO MOMENTO QUE SELECIONAR UM ITEM DO MENU func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) 开关(indexPath.row) 案例0: var centerViewController = self.storyboard?.instantiateViewControllerWithIdentifier("ViewController") as!视图控制器 var centerNavController = UINavigationController(rootViewController: centerViewController) var appDelegate:AppDelegate = UIApplication.sharedApplication().delegate as!应用委托 appDelegate.centerContainer!.centerViewController = centerNavController appDelegate.centerContainer!.toggleDrawerSide(MMDrawerSide.Left,动画:真,完成:无) 休息; 情况1: var ensinoViewController = self.storyboard?.instantiateViewControllerWithIdentifier("EnsinoViewController") as! EnsinoViewController var ensinoNavController = UINavigationController(rootViewController: ensinoViewController) var appDelegate:AppDelegate = UIApplication.sharedApplication().delegate as!应用委托 appDelegate.centerContainer!.centerViewController = ensinoNavController appDelegate.centerContainer!.toggleDrawerSide(MMDrawerSide.Left,动画:真,完成:无) 休息; 案例2: var pesquisaViewController = self.storyboard?.instantiateViewControllerWithIdentifier("PesquisaViewController") as! PesquisaViewController var pesquisaNavController = UINavigationController(rootViewController: pesquisaViewController) var appDelegate:AppDelegate = UIApplication.sharedApplication().delegate as!应用委托 appDelegate.centerContainer!.centerViewController = pesquisaNavController appDelegate.centerContainer!.toggleDrawerSide(MMDrawerSide.Left,动画:真,完成:无) 休息; 案例3: var extensaoViewController = self.storyboard?.instantiateViewControllerWithIdentifier("ExtensaoViewController") as!扩展视图控制器 var extensaoNavController = UINavigationController(rootViewController: extensaoViewController) var appDelegate:AppDelegate = UIApplication.sharedApplication().delegate as!应用委托 appDelegate.centerContainer!.centerViewController = extensaoNavController appDelegate.centerContainer!.toggleDrawerSide(MMDrawerSide.Left,动画:真,完成:无) 休息; 案例4: var agendaViewController = self.storyboard?.instantiateViewControllerWithIdentifier("AgendaViewController") as!议程视图控制器 变种议程NavController = UINavigationController(根视图控制器:议程视图控制器) var appDelegate:AppDelegate = UIApplication.sharedApplication().delegate as!应用委托 appDelegate.centerContainer!.centerViewController = 议程导航控制器 appDelegate.centerContainer!.toggleDrawerSide(MMDrawerSide.Left,动画:真,完成:无) 休息; 案例5: var telefoneViewController = self.storyboard?.instantiateViewControllerWithIdentifier("TelefoneViewController") as! TelefoneViewController var telefoneNavController = UINavigationController(rootViewController: telefoneViewController) var appDelegate:AppDelegate = UIApplication.sharedApplication().delegate as!应用委托 appDelegate.centerContainer!.centerViewController = telefoneNavController appDelegate.centerContainer!.toggleDrawerSide(MMDrawerSide.Left,动画:真,完成:无) 休息; 默认: println("\(menuItems[indexPath.row]) 被选中");【问题讨论】:
【参考方案1】:将此代码添加到cellForRowAtIndexPath
。感谢@danh,添加了检查是否已经存在selectedBackroundView
,因此无需分配新的。
if cell.selectedBackgroundView == nil
cell.selectedBackroundView = UIView()
cell.selectedBackgroundView.backgroundColor = // your color
【讨论】:
太棒了!当我看到你给 cell 打电话时,我在想 cellForRowAtIndexPath 要选择颜色,我可以使用十六进制颜色还是只放 UIColor.redColor()?backgroundColor
的类型是 UIColor
,所以你可以使用任何返回 UIColor
对象的东西。
不建议每次单元格滚动到视图中时分配一个 UIView。 cellForRowAtIndexPath 旨在快速运行。用if cell.selectedBackgroundView == nil
保护这个代码
@danh,感谢您指出这一点。但唯一的问题是,如果您希望所有单元格都具有相同的颜色,这是正确的,否则由于单元格重用,您会得到错误的颜色。【参考方案2】:
为什么不只是子类 UITableViewCell 并且在单元格的构造过程中(您在子类单元格上的 init 方法)可以将背景单元格添加到它?
class CustomTableViewCell : UITableViewCell
override init(style: UITableViewCellStyle, reuseIdentifier: String?)
super.init(style: style, reuseIdentifier: reuseIdentifier)
// set your background view here
// add your constraints here
这样您就不会在调用 cellForRowAtIndexPath 期间创建 UIView,这会降低性能。然后,当您的行被选中时,您只需抓住单元格并对其进行任何操作即可。
let cell = tableView.cellForRow(at: indexPath)
cell.selectedBackgroundView.backgroundColor = // set your color here
【讨论】:
以上是关于更改所选 UITableViewCell 的背景颜色的主要内容,如果未能解决你的问题,请参考以下文章
在 iOS 14 中更改 UITableViewCell 背景颜色
选择时 UITableViewCell 背景颜色中的目标 c 子视图
使用 UIButton 自定义 UITableViewCell:无法更改 UIImage