我是xcode和swift的新手,我遇到了使用两个IBAction来启用按钮的问题。我有2个文本字段,我有一个禁用的按钮。我希望在填写两个文本字段时启用该按钮。我该怎么做?到目前为止,我已经为两个文本字段声明了IBActions的两个函数:
@IBAction func yourWeightEditingDidBegin(sender: AnyObject) {
}
@IBAction func calorieNumberEditingDidBegin(sender: AnyObject) {
}
谢谢!
答案 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函数,而不是在编辑开始时使用它。