【问题标题】:Change background color of selected UITableViewCell更改所选 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]) 被选中"); } } }

【问题讨论】:

    标签: ios swift uitableview


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-18
      • 2010-11-12
      相关资源
      最近更新 更多