Swift Xcode 6:如何在一个语句中使用多个函数?

时间:2014-11-11 22:23:28

标签: xcode function swift uibutton uitextfield

我是xcode和swift的新手,我遇到了使用两个IBAction来启用按钮的问题。我有2个文本字段,我有一个禁用的按钮。我希望在填写两个文本字段时启用该按钮。我该怎么做?到目前为止,我已经为两个文本字段声明了IBActions的两个函数:

 @IBAction func yourWeightEditingDidBegin(sender: AnyObject) {

}

@IBAction func calorieNumberEditingDidBegin(sender: AnyObject) {

}

谢谢!

3 个答案:

答案 0 :(得分:1)

一种方法是使用UITextFieldDelegate函数而不是IBOutlets:

func textFieldShouldReturn(textField: UITextField!) -> Bool {

    textField.resignFirstResponder()

    if yourWeight.text != ""  && calorieNumber.text != "" {

        button.enabled = true
    }

    return true
}

答案 1 :(得分:1)

我也实施UITextFieldDelegate,但我使用shouldChangeCharactersInRange。这样,该按钮的状态随用户键入而变化:

如果只处理两个文本字段,它看起来像:

func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {

    // get the value this text field will have after the string is replaced

    let value: NSString = (textField.text as NSString).stringByReplacingCharactersInRange(range, withString: string)

    // get the value of the other text field

    let otherValue = textField == yourWeight ? calorieNumber.text : yourWeight.text

    // only enable done if these are both non-zero length

    doneButton.enabled = (value != "" && otherValue != "")

    return true
}

显然,要使其正常工作,您必须为这两个文本字段指定delegate(在IB中或以编程方式)。我也通常将上面的"自动启用返回键"文本字段的选项。

答案 2 :(得分:0)

你没有。相反,尝试这样的事情

var weightIsFilled = false
var calorieNumberIsFilled = false

@IBAction func yourWeightEditingDidBegin(sender: AnyObject) {
 if valueOfWeightTextFieldIsValid() {
   self.weightIsFilled = true
 }
 if self.weightIsFilled && self.calorieNumberIsFilled {
   self.enableButton()
 }
}

@IBAction func calorieNumberEditingDidBegin(sender: AnyObject) {
 if valueOfCalorieNumberTextFieldIsValid() {
   self.calorieNumberIsFilled = true
 }
 if self.weightIsFilled && self.calorieNumberIsFilled {
   self.enableButton()
 }
}

您也可能希望使用在文本字段值更改时调用的IBAction函数,而不是在编辑开始时使用它。