开关打开时更改 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 已经是 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/

【讨论】:

由于某种原因背景颜色没有改变。我刚刚上传了一张显示此问题的图片。有什么建议吗? 我在你的代码中看不到,但是你实现了tableview的数据源方法,不是吗?你能上传这些方法的代码吗?特别是 cellForRowAt indexPath: IndexPath tableview的datasource方法如何实现? 您使用的是tableViewController,因此该类已经是tableView 的dataSourcedelegate。您可以覆盖几个方法,这些方法告诉您 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的主要内容,如果未能解决你的问题,请参考以下文章

iPhone:当铃声/静音开关从关闭模式打开时不想退出游戏

iPhone SDK:设置音频路由并在静音开关打开时静音音频

使用开关更改选择器视图的值

防止 on_active 回调中的活动状态更改

打开时更改 Bootstrap 模态背景设置

带有弹出框的自定义选择,打开时更改颜色