UITableView和UITextField borderColor问题

时间:2018-05-28 13:15:51

标签: ios swift uitableview uitextfield

我是Swift的新手,通过做更多的学习。无法查明我的错误。 我编码错误或执行错误。

我试图在Chameleon框架的帮助下实现主题功能。 我已经能够更改一些UI元素的颜色,例如UISegmentedControlUIButton,但我无法更改borderColor的{​​{1}} {1}}和UITextField以及borderColor的separatorColor。 UITableViewUITextField的颜色更改在各个组件的图层上完成。 这层可能是我的问题吗?

预览:

Preview

  1. 第一个屏幕:UITableView
  2. 第二屏:ViewController
  3. 我的代码: // ViewController.swift

    ColorTableViewController

    // ColorTableViewController.swift

    import UIKit
    import ChameleonFramework
    import QuartzCore
    
    class ViewController: UIViewController {
    
        @IBOutlet weak var segmentedControl: UISegmentedControl!
    
        @IBOutlet weak var tableView: UITableView!
        @IBOutlet weak var textField: UITextField!
    
        @IBOutlet weak var button: UIButton!
    
        var themeColor = UIColor.black {
            didSet{
                if (UserDefaults.standard.value(forKey: "themeColor") != nil) {
                    themeColor = UserDefaults.standard.value(forKey: "themeColor") as! UIColor
                }
                else{
                    themeColor = UIColor.black
                }
            }
        }
        var themeContrastColor = UIColor.white {
            didSet{
                if (UserDefaults.standard.value(forKey: "contrastThemeColor") != nil) {
                    themeContrastColor = UserDefaults.standard.value(forKey: "contrastThemeColor") as! UIColor
                }
                else{
                    themeContrastColor = UIColor.white
                }
            }
        }
    
    
        override func viewDidLoad() {
            super.viewDidLoad()
            // Do any additional setup after loading the view, typically from a nib.
            styleUI()
        }
    
        override func didReceiveMemoryWarning() {
            super.didReceiveMemoryWarning()
            // Dispose of any resources that can be recreated.
        }
    
        func styleUI(){
            DispatchQueue.main.async {
                self.segmentedControl.tintColor = self.themeColor
    
                self.tableView.tintColor = self.themeColor
                self.tableView.layer.borderWidth = 1.0
                self.tableView.layer.borderColor = self.themeColor.cgColor
                self.tableView.separatorColor = self.themeColor
    
                self.textField.layer.borderWidth = 1.0
                self.textField.layer.masksToBounds = true
                self.textField.layer.borderColor = self.themeColor.cgColor
                self.textField.tintColor = self.themeColor
    
                self.button.backgroundColor = self.themeColor
                self.button.tintColor = self.themeContrastColor
            }
    
    
        }
    
    
    }
    extension ViewController: UITableViewDelegate, UITableViewDataSource{
        func numberOfSections(in tableView: UITableView) -> Int {
            return 1
        }
        func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
            return 7
        }
        func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
            let cell = tableView.dequeueReusableCell(withIdentifier: "cellID", for: indexPath) 
            cell.textLabel?.text = "Row: \(indexPath.row)"
            return cell
        }
    
    }
    

2 个答案:

答案 0 :(得分:0)

在将新值存储到变量后立即调用

didSet。在你的情况下你的变量didSet没有调用。尝试在viewWillAppear或viewDidAppear块上更新主题颜色和themeContrastColor。

之后,您应该在viewWillAppear或viewDidAppear中再次调用styleUI()方法。

var themeColor = UIColor.black
var themeContrastColor = UIColor.white

override func viewDidAppear(_ animated: Bool) {
    super.viewWillAppear(animated)

    let themeColorData = UserDefaults.standard.value(forKey: "themeColor")
    let contrastColorData = UserDefaults.standard.value(forKey: "contrastThemeColor")

    themeColor = (NSKeyedUnarchiver.unarchiveObject(with: themeColorData as! Data) as? UIColor)!
    themeContrastColor = (NSKeyedUnarchiver.unarchiveObject(with: contrastColorData as! Data) as? UIColor)!

    styleUI()
}

或者您可以使用委托协议来通知您的viewController,而不是使用viewDidAppear。

答案 1 :(得分:0)

不要使用var themeColor = UIColor.black,请尝试使用:

var themeColor: UIColor? {
    didSet {

    }
}