2016-03-03 105 views
0

在下面的代码,fahrenheitFieldEditingChanged()如预期,如果它有参数为什么我的IBAction函数需要一个参数?

textField: UITextField 

如果我删除从功能参数,它似乎并没有被称为是所谓的,即使我删除的连接从旧的函数原型中重新创建新的函数原型。我知道它不会被调用,因为我加了这条线在函数的开始,更改不会不管我做什么发生:

celsiusLabel.text = "?????" 

请帮助?这是我的代码。 (为什么我关心这个参数呢?我希望我可以引用我的IBOutlet textField,它应该和传递给编辑更改函数的对象相同,因为我的故事板只有一个UITextField。)

import Foundation 
import UIKit 

class ConversionViewController: UIViewController { 

    @IBOutlet var celsiusLabel: UILabel! 
    @IBOutlet var textField: UITextField! 

    var fahrenheitValue: Double? { 
     didSet { 
      updateCelsiusLabel() 
     } 
    } 

    var celsiusValue: Double? { 
     if let value = fahrenheitValue { 
      return (value - 32) * 5/9 
     } 
     else { 
      return nil 
     } 
    } 

    func updateCelsiusLabel() { 
     if let value = celsiusValue { 
      celsiusLabel.text = "\(value)" 
     } 
     else { 
      celsiusLabel.text = "???" 
     } 
    } 

    @IBAction func fahrenheitFieldEditingChanged() { 
     if let text = textField.text { 
      if let value = Double(text) { 
       fahrenheitValue = value 
      } 
      else { 
       fahrenheitValue = nil 
      } 
     } 
    } 

    @IBAction func dismissKeyboard(sender: AnyObject) { 
     textField.resignFirstResponder() 
    } 

} 
+0

“我知道这不是被称为”我不认为你知道这一点。你有一个调试器。调试!在“fahrenheitFieldEditingChanged”主体的开始处放置一个断点,并查看当您在该字段中输入内容时是否触击它。如果你这样做,它被称为。 :) – matt

+0

好点。我检查了调试器,现在我可以完全肯定地说它没有被调用。 – MackTuesday

+0

我已经解决了这个问题,结果表明这个行为对我的项目非常特别。我应该删除这个问题吗? – MackTuesday

回答

2

这有什么好做的参数(不过,我要补充的存在或不存在,具有参数是非常好的做法,你应该坚持下去,即使你只是一个文本字段)。

这是真正的事情。你可以从这个截图中看到,一个文本字段发出许多不同的控制事件的行动讯息:

enter image description here

要连接到fahrenheitFieldEditingChanged的一个是“编辑而改变”。这是用户每次更改文本时都会触发的那个。如果连接不同的控制事件,则fahrenheitFieldEditingChanged将被调用控制事件,这不会是你想要的。

同样,如果您通过控制动作连接拖到代码,该对话框提供了创建了错误的行动连接

enter image description here

如果不改变编辑真的结束编辑在您连接之前更改,不好的事情将发生在路上。

不幸的是,当您连接到现有的操作方法时,对话框甚至不会出现!您只需获取编辑完成操作的连接。当你断开连接并重新连接时,这就是你所发生的事情。

道德:使用连接检查器(我的第一个屏幕快照),所以你可以从正确的控制事件首先拖动

+0

谢谢。这有助于。 =) – MackTuesday

+0

我知道你会喜欢它。 :)在我们之前的讨论中,你的评论给了我足够的线索来猜测你必须完成的事情。 – matt

相关问题