斯威夫特:按钮启用不工作? [英] Swift: Button Enabling Not Working?

查看:89
本文介绍了斯威夫特:按钮启用不工作?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个在我的视图控制器禁用的按钮。我有当两个文本字段编辑为IBActions。我试图启用该按钮时,两个文本字段都包含整数。我试图做到这一点,但每当我运行iPhone模拟器,甚至当我把整数到每个文本字段按钮保持禁用。为什么住禁用?我是新来的迅速,所以请帮助我。这里是code为我的整个项目的:

I have a button that is disabled in my view controller. I have IBActions for when two text fields are edited. I am trying to enable the button when two text fields both contain integers. I have tried to do this, but whenever I run the ios simulator, the button stays disabled even when I put integers into each text field. Why is it staying disabled? I am new to swift, so please help me out. Here is the code for my entire project:

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
}

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
}

@IBAction func yourWeightEditingDidEnd(sender: AnyObject) {
    yourWeightTextField.resignFirstResponder()
}

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

var yourWeightFilled = false
var calorieNumberFilled = false

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

    if let intVal = text.toInt() {
        self.yourWeightFilled = true
    } else {
        self.yourWeightFilled = false
    }
    return true
}
func calorieNumberTextFieldValueValidInt(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
    // Find out what the text field will be after adding the current edit
    let text = (calorieNumberTextField.text as NSString).stringByReplacingCharactersInRange(range, withString: string)

    if let intVal = text.toInt() {
        self.calorieNumberFilled = true
    } else {
        self.calorieNumberFilled = false
    }
    return true
}

@IBAction func yourWeightTextFieldEdited(sender: AnyObject) {
    if self.yourWeightFilled && self.calorieNumberFilled {
        self.calculateButton.enabled = true
    }
}

@IBAction func calorieNumberTextFieldEdited(sender: AnyObject) {
    if self.yourWeightFilled && self.calorieNumberFilled {
        self.calculateButton.enabled = true
    }
}

}

推荐答案

您委托方法是有点混合起来 - 他们必须精确地命名为呼叫者所期待的,否则他们不会被人发现,所以 yourWeightTextFieldValueValidInt() calorieNumberTextFieldValueValidInt()不被称为可言。相反,你需要处理编辑的两个的单一方法文本字段:

Your delegate methods are a bit mixed up -- they have to be named exactly what the caller expects, or they won't be found, so yourWeightTextFieldValueValidInt() and calorieNumberTextFieldValueValidInt() aren't being called at all. Instead you'll need to handle the edits to both text fields in a single method:

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 textField == yourWeightTextField {
        yourWeightFilled = text.toInt() != nil
    } else if textField == calorieNumberTextField {
        calorieNumberFilled = text.toInt() != nil
    }

    return true
}

这篇关于斯威夫特:按钮启用不工作?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆