So habe ich Ziele zu meinen IBActions hinzugefügt, die auftreten, wenn sich der Wert eines Textfelds ändert. Wenn diese Aktionen auftreten, sollte das System überprüfen, ob die beiden Textfelder beide Ganzzahlen sind. Ich habe zwei Variablen auf false gesetzt, und sie sind auf wahr gesetzt, wenn beide ein int sind. In den IBActions habe ich if-Anweisungen, die angeben, dass eine Schaltfläche aktiviert werden soll, wenn beide Variablen Ganzzahlen enthalten. Wenn ich den Simulator ausführe, wird diese Schaltfläche nicht aktiviert, wenn beide Textfelder eine ganze Zahl enthalten.Swift: Wertverändernde Steuerereignisse werden nicht aufgerufen?
Ich bin neu zu schnell, also wenn möglich, schreiben Sie bitte den gesamten Code aus und wo es in meinem Code sein sollte. Hier ist, was ich bisher:
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
}
}
}
Sie haben ein 'n' auf 'EditingChanged' im zweiten Codebeispiel vergessen. – adheus
@adheus - behoben, danke. – Piotr
@Piotr aber es funktioniert nur, wenn ich Textfeld mit der Tastatur bearbeiten. Was muss ich tun, wenn ich das Textfeld mit einem Klick ändern muss? – MHSFisher