2015-04-19 19 views
0

所以今天我一直在研究一個溫度轉換器應用程序,以便將我自己介紹到我迄今在swift中學到的概念(我目前正在上課的過程中),我決定添加一個選擇器視圖。我沒有任何錯誤,但是當我按下UIButton時,它不會響應我代碼中列出的任何if語句 - 這是所有溫度轉換的地方。所以我的問題是,爲什麼按下按鈕時沒有轉換在文本字段中輸入的溫度,我該如何解決?由於特殊的選取器視圖/功能/行動問題

代碼:

import UIKit 

class ViewController: UIViewController, UIPickerViewDelegate { 


override func viewDidLoad() { 
    super.viewDidLoad() 


    } 

    // 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. 
    } 

    @IBOutlet weak var temperatureTextField: UITextField! 

    @IBOutlet weak var conversionTypePickerView: UIPickerView! 

    var temperatureConversions = ["°Farenheit-°Celcius", "°Celcius-°Farenheit", "°Farenheit-Kelvin", "Kelvin-°Farenheit", "°Celcius-Kelvin", "Kelvin-°Celcius"] 
    func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int{ 
     return 1 
    } 
    func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int{ 
     return temperatureConversions.count 
    } 
    func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String! { 
     return temperatureConversions[row] 
    } 

    @IBOutlet weak var newTemperatureLabel: UILabel! 

    @IBAction func convertTemperatureButton(sender: UIButton) { 
     var temperatureTextFieldConversion = temperatureTextField.text 
     var temperatureTextFieldToDouble = Double((temperatureTextFieldConversion as NSString).doubleValue) 

    // Converts number entered from textfield into double. 

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

      if temperatureConversions[row] == "°Farenheit-°Celcius"{ 
      newTemperatureLabel.text = "\((temperatureTextFieldToDouble - 32)/1.8)" + " °Celcius" 

    //this is the first example of the if statements I mentioned above, other five are listed below 

      } 
      else{ 

      } 

      if temperatureConversions[row] == "°Celcius-°Farenheit"{ 
      newTemperatureLabel.text = "\(temperatureTextFieldToDouble * 1.8 + 32)" + " °Farenheit" 


      } 
      else{ 

      } 

      if temperatureConversions[row] == "°Farenheit-Kelvin"{ 
      newTemperatureLabel.text = "\(((temperatureTextFieldToDouble - 32)/1.8) + 273.15)" + " Kelvin" 

      } 
      else{ 

      } 

      if temperatureConversions[row] == "Kelvin-°Farenheit"{ 
      newTemperatureLabel.text = "\((temperatureTextFieldToDouble - 273.15) * 1.8 + 32.00)" + " °Farenheit" 

      } 
      else { 

      } 

      if temperatureConversions[row] == "°Celcius-Kelvin"{ 
      newTemperatureLabel.text = "\(temperatureTextFieldToDouble + 273.15)" + " Kelvin" 

      } 
      else{ 

      } 

      if temperatureConversions[row] == "Kelvin-°Celcius"{ 
      newTemperatureLabel.text = "\(temperatureTextFieldToDouble - 273.15)" + " °Celcius" 

      } 
      else{ 

      } 


     } 

     newTemperatureLabel.hidden = false 
     temperatureTextField.resignFirstResponder() 
     temperatureTextField.text = "" 
    } 
} 
+0

歡迎堆棧溢出。如果我的答案解決了您的問題,請點擊旁邊的複選標記將其變爲綠色。 http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work/5235#5235 – vacawama

回答

0

你的錯誤是,你pickerView:DidSelectRow:inComponent:是你convertTemperatureButton:函數中。它需要成爲viewController中的頂級函數才能被調用。

移動pickerView:DidSelectRow:inComponent:到頂層,有它在你的viewController設置屬性conversionType,然後有convertTemperature使用該屬性:

import UIKit 

class ViewController: UIViewController, UIPickerViewDelegate { 

    var conversionType = "" 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     conversionType = temperatureConversions[0] 
    } 

    // 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. 
    } 

    @IBOutlet weak var temperatureTextField: UITextField! 

    @IBOutlet weak var conversionTypePickerView: UIPickerView! 

    var temperatureConversions = ["°Farenheit-°Celcius", "°Celcius-°Farenheit", "°Farenheit-Kelvin", "Kelvin-°Farenheit", "°Celcius-Kelvin", "Kelvin-°Celcius"] 
    func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int{ 
     return 1 
    } 
    func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int{ 
     return temperatureConversions.count 
    } 
    func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String! { 
     return temperatureConversions[row] 
    } 

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

     conversionType = temperatureConversions[row] 
    } 

    @IBOutlet weak var newTemperatureLabel: UILabel! 

    // Converts number entered from textfield into double. 
    @IBAction func convertTemperatureButton(sender: UIButton) { 
     var temperatureTextFieldConversion = temperatureTextField.text 
     var temperatureTextFieldToDouble = Double((temperatureTextFieldConversion as NSString).doubleValue) 

     if conversionType == "°Farenheit-°Celcius"{ 
      newTemperatureLabel.text = "\((temperatureTextFieldToDouble - 32)/1.8)" + " °Celcius" 

      //this is the first example of the if statements I mentioned above, other five are listed below 

     } 

     if conversionType == "°Celcius-°Farenheit"{ 
      newTemperatureLabel.text = "\(temperatureTextFieldToDouble * 1.8 + 32)" + " °Farenheit" 


     } 

     if conversionType == "°Farenheit-Kelvin"{ 
      newTemperatureLabel.text = "\(((temperatureTextFieldToDouble - 32)/1.8) + 273.15)" + " Kelvin" 

     } 

     if conversionType == "Kelvin-°Farenheit"{ 
      newTemperatureLabel.text = "\((temperatureTextFieldToDouble - 273.15) * 1.8 + 32.00)" + " °Farenheit" 

     } 

     if conversionType == "°Celcius-Kelvin"{ 
      newTemperatureLabel.text = "\(temperatureTextFieldToDouble + 273.15)" + " Kelvin" 

     } 

     if conversionType == "Kelvin-°Celcius"{ 
      newTemperatureLabel.text = "\(temperatureTextFieldToDouble - 273.15)" + " °Celcius" 

     } 

     newTemperatureLabel.hidden = false 
     temperatureTextField.resignFirstResponder() 
     temperatureTextField.text = "" 
    } 
}