如何确定最后的ACTIV的UITextField在Xcode

问题描述 投票:0回答:2

我是新来的迅速,我玩弄一个小转换器应用程序。我有两个文本字段和一个“转换”按钮。我想从去年ACTIV文本字段转换值覆盖非acticv文本字段。我知道这将是更容易更文本字段和更多的按钮,但我想解决这种方式。

任何人都可以给我一个建议吗?

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)"
}
swift uitextfield
2个回答
0
投票

我建议使用UITextFieldDelegate功能textFieldDidEndEditing。确保你继承你的viewController作为UITextFieldDelegate

class ViewController: UIViewController, UITextFieldDelegate {

每个文本字段的委托设置在viewDidLoad自我。

override func viewDidLoad() {
    super.viewDidLoad() 
    InputFahrenheit.delegate = self
    InputCelsius.delegate = self
}

使用这种方法,你甚至不会需要一个UIButton,但你可以使用该按钮来强制文本框结束编辑这样。

@objc func buttonAction (sender: UIButton) {
    self.view.endEditing(true)
}

这将调用此委托方法如果用户编辑文本框。

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

0
投票

我不太知道这一点,但我认为,如果你按下按钮,按钮本身将成为第一个响应者,因此您的代码将无法正常工作。

这样做的正确方法,是设置,当你完成编辑文本框的一个被调用IBAction为功能。就在文本框的故事板内部连接到代码就像你与你的按钮做了。

然后,您可以设置两个功能,一是为每个文本字段的,所以你不必担心第一个响应者。

© www.soinside.com 2019 - 2024. All rights reserved.