更改所选 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

选中时更改 UICollectionView 单元格的背景和标签颜色

选择行时禁用uitableviewcell中的突出显示按钮

iOS:所选 UITableViewCell 的 UITextField 颜色错误