我试图让用户在打开黑暗模式时(使用开关)将表格视图单元格背景颜色更改为黑色(因此是暗模式)。我也想知道如何在开关打开时更改导航栏的颜色。
以下是我的尝试(完整代码):
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.
}
}
这是另一张显示我主要故事板的图片
答案 0 :(得分:1)
对于UITableViewCells的背景颜色,您可以使用一个布尔值来指示夜间模式是否已启用,就像您现在一样。
当开关值发生变化时(从关闭到开启或反之),您应该拨打tableView.reloadData()
。这样,将为每个单元格再次调用方法cellForIndexPath
。在此方法中,您应检查夜间模式是否打开(使用布尔值),因此相应地设置单元格的backgroundColor。
对于navigationBar,您可以使用名为barTintColor的属性。您可以通过以下方式使用它
UINavigationController?.navigationBar.barTintColor = //your color
另外,请记住,您应该实现tableView的数据源方法。由于你的tableviewController已经是datasource
和delegate
,你只需要覆盖它们。有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,你应该使用单元格来改变颜色。