开关打开时更改 UITableViewCells 的背景颜色 - Swift
Posted
技术标签:
【中文标题】开关打开时更改 UITableViewCells 的背景颜色 - Swift【英文标题】:Change Background Color of UITableViewCells when Switch is on - Swift 【发布时间】:2017-02-09 23:43:01 【问题描述】:我试图让用户在打开暗模式时(使用开关)将表格视图单元格的背景颜色更改为黑色(因此是暗模式)。我也想知道如何在开关打开时更改导航栏的颜色。
以下是我尝试过的(完整代码):
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.
这是另一张展示我的主要故事板的图片
【问题讨论】:
你把这段代码放在什么函数里了? @nanothread59 在与 UITableViewController 关联的 viewdidload 函数中的 swift 类文件中,其中包含单元格中的暗模式开关 【参考方案1】:对于 UITableViewCells 的背景颜色,您可以使用一个布尔值来指示夜间模式是否开启,就像现在一样。
当开关值发生变化(从关闭到打开或反之)时,您应该调用tableView.reloadData()
。这样,将再次为每个单元格调用方法cellForIndexPath
。在这种方法中,您应该检查夜间模式是否打开(使用布尔值),因此相应地设置单元格的背景颜色。
对于导航栏,您可以使用名为 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/
【讨论】:
由于某种原因背景颜色没有改变。我刚刚上传了一张显示此问题的图片。有什么建议吗? 我在你的代码中看不到,但是你实现了tableview的数据源方法,不是吗?你能上传这些方法的代码吗?特别是 cellForRowAt indexPath: IndexPath tableview的datasource方法如何实现? 您使用的是tableViewController,因此该类已经是tableView 的dataSource
和delegate
。您可以覆盖几个方法,这些方法告诉您 tableView 如何对某些事件做出反应或提供什么信息。有三个重要的。我将编辑问题以便更好地理解
我已将我的完整代码添加到上述问题中,如果这能让您了解如何解决这个问题。【参考方案2】:
要更改单元格背景颜色,请使用:
cell.contentView.backgroundColor = //Your Color
或者
cell.backgroundColor = //Your Color
你应该使用单元格来改变颜色,而不是 tableview。
【讨论】:
要更改导航栏颜色,请点击此链接:***.com/questions/39931463/… @Rajat Khare 请查看本教程,您将全面了解 iOS 中的 tableview 实现:appcoda.com/… 如果我能接受两个答案,我会接受的,因为您和 Frederico 都帮助我实现了这一点。只是想让你知道。谢谢! 谢谢@RajatKhare以上是关于开关打开时更改 UITableViewCells 的背景颜色 - Swift的主要内容,如果未能解决你的问题,请参考以下文章