如何确定Xcode中的最后一个激活UITextField

时间:2019-02-02 22:11:56

标签: swift uitextfield

我是新手,我正在玩一个小型转换器应用程序。我有两个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)"
}

2 个答案:

答案 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)
    }
}