swift - 天气 Swift 首选项

标签 swift xcode weather

我目前正在使用 xCode 开发一个应用程序,我是 iOS 新手。我的天气格式当前正在向我的数据库提交“摄氏度”和“华氏度”,而不是发送 C 或 F。我已经尝试了几件事,但看起来它也将我的显示文本更改为 C 或 F。我想保留显示文本为华氏度和摄氏度。这是我的代码:

import UIKit
import FirebaseAuth
import FirebaseDatabase

class PreferencesVC: UIViewController, UITextFieldDelegate, 
UIPickerViewDataSource, UIPickerViewDelegate {

@IBOutlet weak var setTimeFormat: UITextField!
@IBOutlet weak var setUnitFormat: UITextField!
@IBOutlet weak var setLanguage: UITextField!

var timePicker = UIPickerView()
var unitPicker = UIPickerView()
var languagePicker = UIPickerView()

var timeData: [String] = [String]()
var unitData: [String] = [String]()
var langugageData: [String] = [String]()


var preferenceHandle: DatabaseHandle!

override func viewDidLoad() {
    super.viewDidLoad()

    self.hideKeyboardWhenTappedAround()
    self.view.backgroundColor = UIColor(patternImage: UIImage(named: "background4.png")!)

    guard Auth.auth().currentUser != nil else {
        print("TEST: No current user")
        performSegue(withIdentifier: "LoginVC", sender: nil)
        return
    }

    self.setTimeFormat.delegate = self
    self.setUnitFormat.delegate = self
    self.setLanguage.delegate = self

    timeData = ["12 Hour","24 Hour"]
    unitData = ["Celcius", "Fahrenheit"]
    langugageData = ["English","Francais"]

    timePicker.dataSource = self
    timePicker.delegate = self

    unitPicker.dataSource = self
    unitPicker.delegate = self

    languagePicker.dataSource = self
    languagePicker.delegate = self

    setTimeFormat.inputView = timePicker
    setUnitFormat.inputView = unitPicker
    setLanguage.inputView = languagePicker

    setTimeFormat.text = "12 Hour"
    setUnitFormat.text = "Fahrenheit"
    setLanguage.text = "English"

    let userID = User.uid
    self.preferenceHandle = DataService.instance.userRef.child(userID).child("UserPreferences").observe(DataEventType.value, with: { (snapshot) in
        if let userPreference = snapshot.value as? Dictionary<String, AnyObject> {
            if let timeFormat = userPreference["UserTimeFormat"] as? String {
                User.timeFormat = timeFormat
                switch(timeFormat){
                case "12H":
                    self.setTimeFormat.text = "12 Hour"
                    break;
                case "24H":
                    self.setTimeFormat.text = "24 hour"
                    break;
                default:
                    self.setTimeFormat.text = "12 Hour"
                    break;
                }

            }
            if let unitFormat = userPreference["UserTempFormat"] as? String {
                User.unitFormat = unitFormat
                switch(unitFormat){
                case "F":
                    self.setUnitFormat.text = "Fahrenheit"
                    break;
                case "C":
                    self.setUnitFormat.text = "Celcius"
                    break;
                default:
                    self.setUnitFormat.text = "Fahrenheit"
                    break;
                }
            }
            if let language = userPreference["UserLanguage"] as? String {
                print("language = " , language)
                User.language = language
                switch(language){
                case "English":
                    self.setLanguage.text = "English"
                    break;
                case "Français":
                    self.setLanguage.text = "Français"
                    break;
                default:
                    self.setLanguage.text = "English"
                    break;
                }
            }
        }
    })

    // Do any additional setup after loading the view.
}

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

@IBAction func cancelButtonPressed(_ sender: Any) {
    print("THEY PRESSED THE CANCEL BUTTON MASTER")
    DataService.instance.userRef.child(User.uid).child("UserPreferences").removeObserver(withHandle: preferenceHandle)
    dismiss(animated: true, completion: nil)
}

@IBAction func submitButtonPressed(_ sender: Any) {
    print("THEY PRESSED THE SUBMIT BUTTON MASTER")

    var userPreferences: Dictionary<String,String> = [:]

    if (self.setTimeFormat != nil) && setTimeFormat.text != "" {
        if let timeFormat = setTimeFormat.text {
            switch(timeFormat){
            case "24 Hour":
                userPreferences["UserTimeFormat"] = "24H"
                break;
            case "12 Hour":
                userPreferences["UserTimeFormat"] = "12H"
                break;
            default:
                userPreferences["UserTimeFormat"] = "12H"
                break;
            }
        }
    }
    if (self.setUnitFormat != nil) && setUnitFormat.text != "" {
        if let unitFormat = setUnitFormat.text {
            switch(unitFormat){
            case "Fahrenheit":
                userPreferences["UserTempFormat"] = "F"
                break;
            case "Celcius":
                userPreferences["UserTempFormat"] = "C"
                break;
            default:
                userPreferences["UserTempFormat"] = "F"
                break;
            }
            userPreferences["UserTempFormat"] = unitFormat
        }
    }
    if (self.setLanguage != nil) && setLanguage.text != "" {
        if let language = setLanguage.text {
            userPreferences["UserLanguage"] = language
        }
    }

    DataService.instance.userRef.child(User.uid).child("UserPreferences").updateChildValues(userPreferences)

    DataService.instance.userRef.child(User.uid).child("UserPreferences").removeObserver(withHandle: preferenceHandle)

    User.timeFormat = setTimeFormat.text!
    User.unitFormat = setUnitFormat.text!
    User.language = setLanguage.text!

    dismiss(animated: true, completion: nil)
}

func textFieldShouldReturn(_ textField: UITextField) -> Bool {
    self.view.endEditing(true)
    return false
}

func numberOfComponents(in pickerView: UIPickerView) -> Int {
    return 1
}

func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
    var count = 0
    switch(pickerView){
    case timePicker:
        count = timeData.count
        break
    case unitPicker:
        count = unitData.count
        break
    case languagePicker:
        count = langugageData.count
        break

    default:
        count = 0
        break
    }
    return count

}

func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {

    switch(pickerView){
    case timePicker:
        return timeData[row]
    case unitPicker:
        return unitData[row]
    case languagePicker:
        return langugageData[row]
    default:
        return timeData[row]
    }

}

func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {


    switch(pickerView){
    case timePicker:
        setTimeFormat.text = timeData[row]
        break
    case unitPicker:
        setUnitFormat.text = unitData[row]
        break
    case languagePicker:
        setLanguage.text = langugageData[row]
        break
    default:
        setTimeFormat.text = timeData[row]
        break
    }
}

}

最佳答案

删除 submitButtonPressed 中的这一行,因为它会覆盖之前设置的内容

userPreferences["UserTempFormat"] = unitFormat

关于swift - 天气 Swift 首选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50816478/

相关文章:

ios - UISearchbar 被 UINavigationbar 压扁

ios - 核心数据问题 : -[NSManagedObject setValue:]: unrecognised selector sent to instance

xcode - 如何使用 LLDB 检查 C++ 对象的实际类?

java - 尝试显示我的应用的天气图标时遇到问题

ios - UIView - 带有持续时间的动画似乎忽略了持续时间

ios - 你能继承 UITabBarItem 并用 xib 文件设置它吗?

ios - 如何防止CGContext中风路径或绘制路径线条画向上 float /旋转回来?

xcode - 如何创建项目模板

android - Activity 背景基于来自 flickr 的天气图像,例如 Yahoo weather

java - 简单的安卓天气应用