Ios 更改选定UITableViewCell的背景色

Ios 更改选定UITableViewCell的背景色,ios,swift,uitableview,Ios,Swift,Uitableview,当我点击时,我正试图改变手机的背景。 它类似于css的悬停或焦点,我如何才能做到这一点 // NO MOMENTO QUE SELECIONAR UM ITEM DO MENU func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { switch(indexPath.row) { case 0:

当我点击时,我正试图改变手机的背景。 它类似于css的悬停或焦点,我如何才能做到这一点

// NO MOMENTO QUE SELECIONAR UM ITEM DO MENU func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { switch(indexPath.row) { case 0: var centerViewController = self.storyboard?.instantiateViewControllerWithIdentifier("ViewController") as! ViewController var centerNavController = UINavigationController(rootViewController: centerViewController) var appDelegate:AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate appDelegate.centerContainer!.centerViewController = centerNavController appDelegate.centerContainer!.toggleDrawerSide(MMDrawerSide.Left, animated: true, completion: nil) break; case 1: var ensinoViewController = self.storyboard?.instantiateViewControllerWithIdentifier("EnsinoViewController") as! EnsinoViewController var ensinoNavController = UINavigationController(rootViewController: ensinoViewController) var appDelegate:AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate appDelegate.centerContainer!.centerViewController = ensinoNavController appDelegate.centerContainer!.toggleDrawerSide(MMDrawerSide.Left, animated: true, completion: nil) break; case 2: var pesquisaViewController = self.storyboard?.instantiateViewControllerWithIdentifier("PesquisaViewController") as! PesquisaViewController var pesquisaNavController = UINavigationController(rootViewController: pesquisaViewController) var appDelegate:AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate appDelegate.centerContainer!.centerViewController = pesquisaNavController appDelegate.centerContainer!.toggleDrawerSide(MMDrawerSide.Left, animated: true, completion: nil) break; case 3: var extensaoViewController = self.storyboard?.instantiateViewControllerWithIdentifier("ExtensaoViewController") as! ExtensaoViewController var extensaoNavController = UINavigationController(rootViewController: extensaoViewController) var appDelegate:AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate appDelegate.centerContainer!.centerViewController = extensaoNavController appDelegate.centerContainer!.toggleDrawerSide(MMDrawerSide.Left, animated: true, completion: nil) break; case 4: var agendaViewController = self.storyboard?.instantiateViewControllerWithIdentifier("AgendaViewController") as! AgendaViewController var agendaNavController = UINavigationController(rootViewController: agendaViewController) var appDelegate:AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate appDelegate.centerContainer!.centerViewController = agendaNavController appDelegate.centerContainer!.toggleDrawerSide(MMDrawerSide.Left, animated: true, completion: nil) break; case 5: var telefoneViewController = self.storyboard?.instantiateViewControllerWithIdentifier("TelefoneViewController") as! TelefoneViewController var telefoneNavController = UINavigationController(rootViewController: telefoneViewController) var appDelegate:AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate appDelegate.centerContainer!.centerViewController = telefoneNavController appDelegate.centerContainer!.toggleDrawerSide(MMDrawerSide.Left, animated: true, completion: nil) break; default: println("\(menuItems[indexPath.row]) is selected"); } } } //没有时间选择菜单上的菜单项 func tableView(tableView:UITableView,didSelectRowAtIndexPath:nsindepath) { 开关(indexPath.row) { 案例0: var centerViewController=self.storyboard?.instanceeviewcontrollerwhiteIdentifier(“ViewController”)作为!ViewController var centerNavController=UINavigationController(rootViewController:centerViewController) var appDelegate:appDelegate=UIApplication.sharedApplication()。委托为!appDelegate appDelegate.centerContainer!.centerViewController=centerNavController appDelegate.centerContainer!.toggleDrawerSide(MMDrawerSide.Left,动画:true,完成:nil) 打破 案例1: var ensinoViewController=self.storyboard?.instanceeviewControllerWithiIdentifier(“ensinoViewController”)作为!ensinoViewController var ENSINONVCONTROLLER=UINavigationController(根视图控制器:ensinoViewController) var appDelegate:appDelegate=UIApplication.sharedApplication()。委托为!appDelegate appDelegate.centerContainer!.centerViewController=EnsinavController appDelegate.centerContainer!.toggleDrawerSide(MMDrawerSide.Left,动画:true,完成:nil) 打破 案例2: var pesquisaViewController=self.storyboard?.instanceeviewcontrollerwhiteIdentifier(“pesquisaViewController”)作为!pesquisaViewController var pesquisaNavController=UINavigationController(rootViewController:pesquisaViewController) var appDelegate:appDelegate=UIApplication.sharedApplication()。委托为!appDelegate appDelegate.centerContainer!.centerViewController=pesquisaNavController appDelegate.centerContainer!.toggleDrawerSide(MMDrawerSide.Left,动画:true,完成:nil) 打破 案例3: var extensaviewcontroller=self.storyboard?.instanceeviewcontrollerwhiteIdentifier(“extensaviewcontroller”)作为!extensaviewcontroller var extensaoNavController=UINavigationController(rootViewController:extensaoViewController) var appDelegate:appDelegate=UIApplication.sharedApplication()。委托为!appDelegate appDelegate.centerContainer!.centerViewController=extensaoNavController appDelegate.centerContainer!.toggleDrawerSide(MMDrawerSide.Left,动画:true,完成:nil) 打破 案例4: var agendaViewController=self.storyboard?.instanceeviewcontrollerwhiteIdentifier(“agendaViewController”)作为!agendaViewController var agendaNavController=UINavigationController(rootViewController:agendaViewController) var appDelegate:appDelegate=UIApplication.sharedApplication()。委托为!appDelegate appDelegate.centerContainer!.centerViewController=agendaNavController appDelegate.centerContainer!.toggleDrawerSide(MMDrawerSide.Left,动画:true,完成:nil) 打破 案例5: var telefoneViewController=self.storyboard?.instantializeeviewcontrollerwhiteIdentifier(“telefoneViewController”)作为!telefoneViewController var telefoneNavController=UINavigationController(rootViewController:telefoneViewController) var appDelegate:appDelegate=UIApplication.sharedApplication()。委托为!appDelegate appDelegate.centerContainer!.centerViewController=telefoneNavController appDelegate.centerContainer!.toggleDrawerSide(MMDrawerSide.Left,动画:true,完成:nil) 打破 违约: println(“\(menuItems[indexPath.row])被选中); } } }
将此代码添加到
cellforrowatinexpath
中。感谢@danh,添加了检查是否已经选择了
selectedBackroundView
,因此无需分配新的

if cell.selectedBackgroundView == nil{
  cell.selectedBackroundView = UIView()
}
cell.selectedBackgroundView.backgroundColor = // your color

为什么不只是将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

令人惊叹的!当我看到你调用cell时,我正在考虑CellForRowatineXpath来选择颜色,我可以使用十六进制颜色,也可以只使用UIColor.redColor()?
backgroundColor
的类型是
UIColor
,因此,您可以使用返回
UIColor
object的任何内容。在每次单元格滚动到视图时分配UIView是不明智的。cellForRowAtIndexPath意味着运行速度很快。使用
if cell.selectedBackgroundView==nil
@danh保护此代码,感谢您指出这一点。但唯一的问题是,如果你想让所有的细胞都是相同的颜色,这是真的,因为否则,由于细胞的重复使用,你会得到错误的颜色。