当Switch开启时改变UITableViewCells的背景颜色 - Swift

时间:2017-02-09 23:43:02

标签: swift xcode uitableview

我试图让用户在打开黑暗模式时(使用开关)将表格视图单元格背景颜色更改为黑色(因此是暗模式)。我也想知道如何在开关打开时更改导航栏的颜色。

以下是我的尝试(完整代码):

import Foundation
import UIKit

class SideMenuController8: UITableViewController{

    @IBOutlet var TableViewColor: UITableView!

    @IBOutlet weak var OpenSettings: UIBarButtonItem!
    @IBOutlet weak var mSwitch: UISwitch!
    @IBOutlet weak var dSwitch: UISwitch!
    override func viewDidLoad() {

        self.navigationController?.navigationBar.topItem!.title = "Settings"


        if revealViewController() != nil {
            OpenSettings.target = revealViewController()
            OpenSettings.action = #selector(SWRevealViewController.revealToggle(_:))
            view.addGestureRecognizer(self.revealViewController().panGestureRecognizer())
        }




//        mSwitch.layer.borderWidth = 1
//        mSwitch.layer.borderColor = UIColor.white.cgColor
        let onColor  = UIColor(red: CGFloat(0.0), green: CGFloat(122.0 / 255.0), blue: CGFloat(1.0), alpha: CGFloat(1.0))
        let offColor = UIColor.white

        //Notifications On Switch
        mSwitch.isOn = false
        /*For on state*/
        mSwitch.onTintColor = onColor
        /*For off state*/
        mSwitch.tintColor = offColor
        mSwitch.layer.cornerRadius = 16
        mSwitch.backgroundColor = offColor

        //Dark Mode Switch
        dSwitch.isOn = false
        /*For on state*/
        dSwitch.onTintColor = onColor
        /*For off state*/
        dSwitch.tintColor = offColor
        dSwitch.layer.cornerRadius = 16
        dSwitch.backgroundColor = offColor




            if (dSwitch.isOn == true){

                TableViewColor.reloadData()
                print("Dark Mode Switch is on")

            }


    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

}

Image

这是另一张显示我主要故事板的图片

enter image description here

2 个答案:

答案 0 :(得分:1)

对于UITableViewCells的背景颜色,您可以使用一个布尔值来指示夜间模式是否已启用,就像您现在一样。

当开关值发生变化时(从关闭到开启或反之),您应该拨打tableView.reloadData()。这样,将为每个单元格再次调用方法cellForIndexPath。在此方法中,您应检查夜间模式是否打开(使用布尔值),因此相应地设置单元格的backgroundColor。

对于navigationBar,您可以使用名为barTintColor的属性。您可以通过以下方式使用它

UINavigationController?.navigationBar.barTintColor = //your color

另外,请记住,您应该实现tableView的数据源方法。由于你的tableviewController已经是datasourcedelegate,你只需要覆盖它们。有3个重要的。

//Number of sections
override func numberOfSections(in tableView: UITableView) -> Int

//Number of rows in a section
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int 

//In this one you setup or return a tableviewcell for the specific
//IndexPath. Here you should create a UITableViewCell and set its background
//color accordingly to the value of the switch
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell

此方法是UITableViewController的基本方法。这可能超出了问题的范围,您可以在多个来源中查看更多信息。这是一个解释更多https://www.ralfebert.de/tutorials/ios-swift-uitableviewcontroller/

的示例

答案 1 :(得分:1)

要更改单元格背景颜色,请使用:

cell.contentView.backgroundColor = //Your Color 

或者

cell.backgroundColor = //Your Color 

而不是tableview,你应该使用单元格来改变颜色。