因此,我将目标添加到了我创建的IBAction中,这些目标在文本字段的值更改时发生。发生这些操作时,系统应检查两个文本字段是否均为整数。我已经将两个变量设置为false,并且当两个变量都是int时,它们都设置为true。在IBAction中,如果两个变量都包含整数,则具有if语句,该语句告知要启用的按钮。当我运行模拟器时,当两个文本字段都包含一个整数时,此按钮将不会启用。

我是新手,所以如果可能的话,请把所有代码写出来,并写在我的代码中。这是我到目前为止的内容:

import UIKit

class ViewController: UIViewController, UITextFieldDelegate {

@IBOutlet weak var calculatorButton: UIButton!
@IBOutlet weak var inspirationLabel: UILabel!
@IBOutlet weak var beginningLabel: UILabel!
@IBOutlet weak var calculatorContainer: UIView!
@IBOutlet weak var answer1Label: UILabel!
@IBOutlet weak var doneButton: UIButton!
@IBOutlet weak var yourWeightTextField: UITextField!
@IBOutlet weak var calorieNumberTextField: UITextField!
@IBOutlet weak var menuExampleButton: UIButton!
@IBOutlet weak var aboutButton: UIButton!
@IBOutlet weak var calculateButton: UIButton!

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib
    yourWeightTextField.delegate = self
    calorieNumberTextField.delegate = self
    calculateButton.enabled = false
    // Calling the textfield valueChanged Methods
    yourWeightTextField.addTarget(self, action:"yourWeightValueChanged:", forControlEvents:.ValueChanged);
    calorieNumberTextField.addTarget(self, action:"calorieNumberValueChanged:", forControlEvents:.ValueChanged);
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

@IBAction func calculatorButtonTapped(sender: AnyObject) {
    calculatorContainer.hidden = false
    inspirationLabel.hidden = true
    beginningLabel.hidden = true
    menuExampleButton.hidden = true
    aboutButton.hidden = true
}

var yourWeightFilled = false
var calorieNumberFilled = false

func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
    // Find out what the text field will be after adding the current edit
    let text = (textField.text as NSString).stringByReplacingCharactersInRange(range, withString: string)

    // If the textfields have the properties of the function
    if textField == yourWeightTextField {
        yourWeightFilled = text.toInt() != nil
    } else if textField == calorieNumberTextField {
        calorieNumberFilled = text.toInt() != nil
    }

    return true
}

func textFieldShouldReturn(textField: UITextField) -> Bool
{
    textField.resignFirstResponder();
    return true;
}

// The methods to close the keyboard when editing is finished
@IBAction func yourWeightEditingDidEnd(sender: AnyObject) {
    yourWeightTextField.resignFirstResponder()
}

@IBAction func calorieNumberEditingDidEnd(sender: AnyObject) {
    calorieNumberTextField.resignFirstResponder()
}

@IBAction func yourWeightValueChanged(sender: AnyObject) {
    // If both variables are true and the text fields contain integers, enable button
    if self.yourWeightFilled && self.calorieNumberFilled {
        self.calculateButton.enabled = true
    }
}
@IBAction func calorieNumberValueChanged(sender: AnyObject) {
    // If both variables are true and the text fields contain integers, enable button
    if self.yourWeightFilled && self.calorieNumberFilled {
        self.calculateButton.enabled = true
    }
}
}

最佳答案

您应该查找EditingChaged事件,而不是ValueChanged
编辑:
我的意思是从:

yourWeightTextField.addTarget(self, action:"yourWeightValueChanged:", forControlEvents:.ValueChanged);
calorieNumberTextField.addTarget(self, action:"calorieNumberValueChanged:", forControlEvents:.ValueChanged);

至 :
yourWeightTextField.addTarget(self, action:"yourWeightValueChanged:", forControlEvents:.EditingChanged);
calorieNumberTextField.addTarget(self, action:"calorieNumberValueChanged:", forControlEvents:.EditingChanged);

您只是在寻找错误的事件。

关于ios - 斯威夫特: Value Changing Control Events Not Calling?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27004061/

10-09 16:16