使用位于另一个视图中的UISwitch修改UITableView外观

时间:2017-01-09 19:26:52

标签: ios swift uitableview

所以我有一个标签式应用程序。在最后一个选项卡中,我有一个UISwitch,我希望它能够更改位于第一个选项卡中的UITableView的背景。开关的定义如下:

SELECT sd.database_id AS DatabaseID
,sd.NAME AS DatabaseName
,CASE 
    WHEN sd.NAME IN (
            'master'
            ,'msdb'
            ,'model'
            ,'tempdb'
            ,'distribution'
            )
        THEN 'S'
    ELSE 'U'
    END AS SysUserType
,sd.compatibility_level AS CompatibilityLevel
,sd.collation_name AS CollationName
,sd.STATE AS STATE
,sd.state_desc AS StateDesc
,recovery_model AS RecoveryModel
,recovery_model_desc AS RecoveryModelDesc
,create_date AS DatabaseCreationDate
,B.last_db_backup_date AS LastBackupDate
,a.SizeMB AS SizeMB
,c.NumberOfConnections AS ActiveDBConnections
,SERVERPROPERTY('Machinename') AS SQLServerName
,CASE 
    WHEN SERVERPROPERTY('Instancename') IS NULL
        THEN 'Default'
    ELSE SERVERPROPERTY('Instancename')
    END AS SQLServerInstanceName
,SERVERPROPERTY('ProductVersion') AS SQLServerVersion
,SERVERPROPERTY('Edition') AS SQLServerEdition
FROM (
SELECT CONVERT(CHAR(100), SERVERPROPERTY('Servername')) AS SERVER
    ,msdb.dbo.backupset.database_name
    ,MAX(msdb.dbo.backupset.backup_finish_date) AS last_db_backup_date
FROM msdb.dbo.backupmediafamily
INNER JOIN msdb.dbo.backupset ON msdb.dbo.backupmediafamily.media_set_id = msdb.dbo.backupset.media_set_id
GROUP BY msdb.dbo.backupset.database_name
) AS B
RIGHT JOIN sys.databases sd ON sd.NAME = B.database_name
INNER JOIN (
SELECT (SUM(size) * 8 / 1024) AS SizeMB
    ,database_id
FROM sys.master_files
GROUP BY database_id
) AS A ON sd.database_id = a.database_id
FULL JOIN (
SELECT DB_NAME(dbid) AS DBName
    ,COUNT(dbid) AS NumberOfConnections
FROM sys.sysprocesses
WHERE dbid > 0
    AND spid >= 51
GROUP BY dbid
) AS C ON sd.NAME = C.DBName
ORDER BY sd.database_id
FOR XML RAW ('DATABASES'),
ROOT ('SERVERROOT'),
Elements

然后设置UserDefaults的操作:

@IBOutlet weak var darkModeSwitch: UISwitch!

以及从UserDefaults中读取的最后一个选项卡的viewDidLoad:

 @IBAction func setUserDefaults() {
    let defaults = UserDefaults.standard
    defaults.set(darkModeSwitch.isOn, forKey: "switchState")
}

UserDefaults部分有效。但是,标题中提到的东西却没有。我尝试过设置一个全局变量:

override func viewDidLoad() {
    super.viewDidLoad()
    let defaults = UserDefaults.standard
    let switchState = defaults.bool(forKey: "switchState")
    darkModeSwitch.isOn = switchState
}

在IBAction中使用以下代码更改为var on = false

true

并在UITableView的viewDidLoad()中:

if darkModeSwitch.isOn {
    on = true
}

但它没有做任何事情。你能帮帮我吗?

1 个答案:

答案 0 :(得分:0)

ViewDidLoad只调用一次。如果在按钮被点击之前加载了viewcontroller,那么你可以期望它什么都不做。如果您终止应用并重新打开它,那么您可以期待看到更改。尝试使用viewWillAppear更新颜色。每次用户在那里导航和返回时都会调用该方法。