【问题标题】:Changing the view color when comparing values比较值时更改视图颜色
【发布时间】:2016-04-01 16:38:33
【问题描述】:

我创建了一个用作背景的视图,我想在标签文本大于或小于变量数时更改其颜色。脚本没问题,但颜色没有变化。

提前致谢。

导入 UIKit

类 ViewController: UIViewController, UITextFieldDelegate {

@IBOutlet weak var localName: UITextField!

@IBOutlet weak var localNameLabel: UILabel!

@IBOutlet weak var localTemp: UILabel!

@IBAction func getData(sender: AnyObject) {
    getWeatherData("http://api.openweathermap.org/data/2.5/weather?q=" + localName.text! + "")
}


@IBOutlet weak var fundo: UIView!

override func viewDidLoad() {
    super.viewDidLoad()
    getWeatherData("http://api.openweathermap.org/data/2.5/weather?q=London")
    // Do any additional setup after loading the view, typically from a nib.
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}


func getWeatherData(urlString: String){
    let url = NSURL (string: urlString)

    let task = NSURLSession.sharedSession().dataTaskWithURL(url!) { (data, response, error) in
        dispatch_async(dispatch_get_main_queue(), {
            self.setLabels(data!)
        })
    }

    task.resume()
}

func setLabels(weatherData: NSData) {

    do {
        let json = try NSJSONSerialization.JSONObjectWithData(weatherData, options:NSJSONReadingOptions.MutableContainers) as! NSDictionary
        print(json)

        //localNameLabel.text = json[("name")] as? String
        if let name = json[("name")] as? String {
            localNameLabel.text = name
        }

        if let main = json[("main")] as? NSDictionary {
            if let temp = main[("temp")] as? Double {
                //convert kelvin to celsius
                let ft = (temp - 273.15)

                let myString = ft.description

                localTemp.text = myString

                self.changeColor()

            }
        }


    } catch let error as NSError {
        print(error)
    }

var number : Float
func changeColor(){

    number = 19.0

    if(Float(localTemp.text!) < number){
        fundo.backgroundColor = .blueColor()
    }else{
        fundo.backgroundColor = .orangeColor()
        }
    }

}

}

编辑后发布整个脚本

【问题讨论】:

  • bg 是什么,你叫changeColor吗?
  • 你是在主线程调用这段代码吗? bg 可见吗? “脚本没问题”是什么意思,你怎么知道的?
  • @Aaron Brager:bg 是可见的,我说没关系,因为 Xcode 不会警告我任何错误。我没有调用此代码。我需要吗?
  • 你是什么意思“我没有调用这个代码”???当然,这是你的代码?!
  • 我认为这是因为条件而自动检查的。对不起,但我自己学的很快。无论如何,忘记并感谢你的好意,@Christian 'fuzi' Orgler

标签: swift view colors


【解决方案1】:

在您的视图控制器中,您需要添加 UITextFieldDelegate 这将允许您访问与您的文本字段相关的方法。视图控制器的顶部应如下所示:

class ViewController: UIViewController,UITextFieldDelegate  //set delegate to class 

然后,您需要在 viewDidLoad 中将文本字段的委托设置为 self,并为文本字段更改时添加一个目标:

override func viewDidLoad() {
    super.viewDidLoad()
    localTemp.delegate = self     //set delegate to this vc
    localTemp.addTarget(self, action: "textFieldDidChange:", forControlEvents: UIControlEvents.EditingChanged)
}

然后你可以实现这个方法,它会在每次按键时运行,你需要像上面那样调用你的 changeColor() 方法:

func textFieldDidChange(textField: UITextField) {
    self.changeColor()
}

【讨论】:

  • 谢谢你,@JoeBenton。主要是为了全解。
  • 试一试,让我知道它是否有效。如果您发现它有帮助,如果您可以将其标记为已接受的答案,那就太好了。
  • 你为什么同时使用委托和目标动作模式?您只需要其中一个。
  • @JoeBenton - 我收到两条错误消息:“值类型 UILabel 没有成员 'delegate'”和“没有成员 'addTarget'”。我不明白为什么我需要在操作字段中包含(操作:“textFieldDidChange:”)
  • Aaron 是对的,您不需要委托部分。只需在 viewdidload 中添加目标以及它在文本更改时运行的方法“textFieldDidChange”。你的 localTemp 是文本字段还是标签??
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-17
  • 1970-01-01
相关资源
最近更新 更多