在viewDidLoad上检查UITextField是否为空并启用按钮

时间:2016-08-22 09:42:39

标签: ios swift uibutton uitextfield

我在ViewController中有多个UItextFields。此外,我还有故事板中的插座功能,以检查文本字段是否为空,仅当文本字段非空时才启用按钮。

对于一些文本字段,我在viewDidLoad之前设置数据,因此用户无需手动输入。即使这些文本字段包含数据,也必须单击一次才能启用该按钮。

var isFirstNameValid = false
@IBAction func validateFirstName(sender: AnyObject) {
        guard (!firstNameText.text!.isEmpty) else{
            isFirstNameValid = false
            return
        }
        isFirstNameValid = true
        enableRegisterButton()
    }


func enableRegisterButton()
    {
        guard (isFirstNameValid) else{
            registerButton.enabled = false
            return
        }
        registerButton.enabled = true
    }

我希望在文本字段包含用户输入的数据或在viewDidLoad方法之前以编程方式设置时启用该按钮。

4 个答案:

答案 0 :(得分:0)

您的代码似乎很好,但我认为您需要尝试替换它:

https.get('https://slack.com/api/oauth.access?client_id='+process.env.CLIENT_ID+'&client_secret='+process.env.CLIENT_SECRET+'&code='+process.env.CODE, (res) => {
    res.on('data', (chunk) => {
        // THIS CODE IS EXECUTED when HTTPS request from slack has finished
        var result = JSON.parse(chunk);
        console.log(JSON.stringify(result));
        process.env.SLACKTOKEN = result.access_token;
        process.env.SLACK_BOT_TOKEN = result.bot.bot_access_token;
        console.log(process.env.SLACKTOKEN);
        console.log(process.env.SLACK_BOT_TOKEN);
        console.log('cb2 : le token est récupéré')
        next();
        app.get('/',ouvertureWebsocket);
    });
});

@IBAction func validateFirstName(sender: AnyObject) {
    guard (!firstNameText.text!.isEmpty) else{
        isFirstNameValid = false
        return
    }
    isFirstNameValid = true
    enableRegisterButton()
}

您可以在您的连接检查器中检查@IBAction func validateFirstName(sender: AnyObject) { isFirstNameValid = !firstNameText.text!.isEmpty enableRegisterButton() } 事件并添加方法。

即使它不起作用,您也可以使用Value Changed方法检查数据值:

viewWillAppear()

答案 1 :(得分:0)

试试这个。但正如你所说“当文本字段有用户输入的数据时”,所以你不能在viewDidLoad之前做到这一点。我认为你应该解释更多。

textField.addTarget(self, action: #selector(YourViewController.textFieldDidChange(_:)), forControlEvents: UIControlEvents.EditingChanged)

func textFieldDidChange(textField: UITextField) {
    //your code.enable your button here
}

答案 2 :(得分:0)

在viewDidLoad()中验证一次所有文本字段并尝试启用注册按钮。这样,即使所有文本字段都已预先填充,也无需单击任何文本字段,即可启用注册按钮 像这样:

isFirstNameValid = !firstNameText.text!.isEmpty
isLastNameValid = !lastNameText.text!.isEmpty
// rest of the fileds...
enableRegisterButton()

答案 3 :(得分:0)

您的验证码需要在没有用户互动的情况下运行,最佳位置是viewDidLoad。创建一个检查器函数,它接受UITextField作为其参数并进行实际检查。这样,您可以在viewDidLoad中以及稍后在IBAction或任何地方验证实际用户输入时调用该检查器功能。

override func viewDidLoad() {
    super.viewDidLoad()

    // This is where your code to set firstNameText goes

    let isFirstNameValid = checker(firstNameText)

    myButton.enabled = false
    if isFirstNameValid { registerButton.enabled = true }
}

func checker(textField: UITextField) -> Bool {
    guard (!textField.text!.isEmpty) else {
        return false
    }
    return true
}

旁注

enableRegisterButton()功能无关紧要。您已经完成了检查,这就是所谓的函数开始,因此检查enableRegisterButton中的名字是否有效是多余的。该函数中唯一有用的行是registerButton.enabled = true,我们可以在不使用该函数的情况下编写。