2014-11-18 25 views
5

Bu yüzden, bir metin alanının değeri değiştiğinde gerçekleşen yarattığım IBActions'e hedefler ekledim. Bu eylemler oluştuğunda, sistem iki metin alanının tam sayı olup olmadığını kontrol etmelidir. İki değişken setini false olarak ayarladım ve her ikisi de int olduğunda true olarak ayarlandılar. IBActions içinde, her iki değişkenin de tamsayı içermesi durumunda bir düğmenin etkinleştirileceğini bildiren ifadeler var. Simülatörü çalıştırdığımda, metin alanlarının her ikisi de bir tamsayı içerdiğinde bu düğme etkinleştirilmez.Swift: Değer Değişen Kontrol Etkinlikleri Aramıyor mu?

Hızlıca yeniyim, mümkünse kodu alıp kodumda olması gereken yeri yazınız. Demek istediğim değiştirmek için:

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

için:

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 
    } 
} 
} 

cevap

9

Sen ValueChanged

DÜZENLEME, EditingChaged olay için değil görünmelidir: İşte ben bugüne kadar ne var

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

Sadece yanlış eve bakıyorsunuz nt. Bir metin değiştirildi olayı arıyorsanız

+0

İkinci kod örneğinde 'EditingChanged' üzerinde bir 'n' unutmuşsunuzdur. – adheus

+0

@adheus - sabit, teşekkürler. – Piotr

+0

@Piotr ancak klavye ile metin alanı düzenlerken çalışır. Bir buton tıklaması ile metin alanını değiştirmem gerektiğinde ne yapmalıyım? – MHSFisher

2

ardından Sağ seçmekmetin alanında tıklayın Düzenleme Gönderilen Etkinlikler den End mü. Bir daire sağ sonunda daireyi tıklatıp Ctrl tuşunu basılı tutun ve ViewController dosya için sürükleyin. İstediğiniz Eylemi ve Click connect olarak adlandırın. Bunun için ekran görüntüleri verdim. İşte i

Sağ metin kutusu üzerine tıklayın ve son olarak görebilirsiniz Bu enter image description hereenter image description here

gibi bir şey görebilirsiniz Eylem burada Swift 2

Xcode 7 Kullanılması am

TextChanged isim TextChanged olayı düzenlendi. Bir metin kutusuna bir şey yazdığınızda ve bu olayı başlattığınızda geri döndürdüğünüzde.

İlgili konular