我是新手,我正在玩一个小型转换器应用程序。我有两个TextField和一个“转换”按钮。 我想用最后一个激活TextField的转换后的值覆盖非acticv Textfield。 我知道使用更多的文本字段和更多的按钮会更容易,但是我想用这种方式解决它。
有人可以给我建议吗?
var NumberC = Int(InputCelcius.text!)!
var NumberF = Int(InputFahrenheit.text!)!
if InputCelcius.isFirstResponder {
if (InputCelcius.text?.isEmpty)! {
NumberC=0
print("NumberC is empty")
}
NumberC = NumberC * 9/5 + 32
InputFahrenheit.text = " \(NumberC)"
}
else if InputFahrenheit.isFirstResponder {
if (InputFahrenheit.text?.isEmpty)! {
NumberF=0
print("NumberF is empty")
}
NumberF = (NumberF - 32) * 5/9
InputCelcius.text = " \(NumberF)"
}
答案 0 :(得分:0)
我不太确定,但是我认为如果您按下按钮,按钮本身将成为第一响应者,因此您的代码将无法工作。
执行此操作的正确方法是设置完成编辑其中一个文本字段时调用的IBAction函数。只需将情节提要中的文本字段连接到代码即可,就像使用按钮一样。
然后,您可以设置两个功能,每个文本字段一个,因此您不必担心firstresponder。
答案 1 :(得分:0)
我建议使用UITextFieldDelegate
函数textFieldDidEndEditing
。确保将viewController子类化为UITextFieldDelegate
。
class ViewController: UIViewController, UITextFieldDelegate {
在viewDidLoad
中将每个textField的委托设置为self。
override func viewDidLoad() {
super.viewDidLoad()
InputFahrenheit.delegate = self
InputCelsius.delegate = self
}
使用这种方法,您甚至不需要UIButton,但是您可以使用该按钮来强制textField这样结束编辑。
@objc func buttonAction (sender: UIButton) {
self.view.endEditing(true)
}
如果用户正在编辑textField,则将调用此委托方法。
func textFieldDidEndEditing (textField: UITextField) {
if textField.isEmpty {return} //this prevents nil errors and user would have to type in "0" if wishing to convert zero.
if textField == InputCelsius {
let conversion = Float(textField.text!) * 9/5 + 32
InputFahrenheit.text = String(format: “%.f”, conversion) //“%.1f” will show one decimal place and so forth
} else if textField == InputFahrenheit {
let conversion = ( Float(textField.text!) - 32 ) * 5/9
InputCelsius.text = String(format: “%.f”, conversion)
}
}