在Swift 1.2

时间:2015-09-16 07:54:51

标签: ios swift uitextfield uitextfielddelegate

我不确定为什么textFieldShouldBeginEditing会返回所有UiTextField

文件:PaymentViewControllerDummy.swift

  class PaymentViewControllerDummy: UIViewController, UITextFieldDelegate {

    @IBOutlet weak var dobTextField: UITextField!
    @IBOutlet weak var nameTextField: UITextField!

    override func viewDidLoad() {
        super.viewDidLoad()

        dobTextField.tag = 1
        nameTextField.tag = 2

        dobTextField.delegate = self
    }

    func textFieldShouldBeginEditing(textField: UITextField) -> Bool {
        println("Tage From textFile: \(textField.tag) ")
        println("Tage From dobTextField: \(dobTextField.tag) ")

        if(textField.tag == dobTextField.tag) {
            println("You are editing date of birth")

            return false
        } else {
            return true
        }
    }
}

所有IBOutlet都已连接。这是非常标准的代码。我已经按时完成了这一次,无论我按textField == self.dobTextField的哪个文字字段都回来true

控制台结果:

enter image description here

我错过了什么吗?

修改

以下是“界面”构建器屏幕

enter image description here

enter image description here

我创建了一个独立的项目并将代码复制到项目中,但是它应该工作,但它不能在这个项目中工作。可能是StoryBoard吗?

2 个答案:

答案 0 :(得分:0)

访问文本字段中文本字段的最佳方法是编辑方法是通过tags。设置两个文本字段的标记,例如self.dobTextField.tag=1& self.nameTextField.tag=2。然后在

func textFieldShouldBeginEditing(textField: UITextField) -> Bool 
        println(textField.tag)
        println(dobTextField.tag)

        if(textField.tag == 1) //dob text field is currently in edit mode 
        {
            println("You are editing date of birth")
            return true 
        }
        else  // name text field is in edit mode 
        {
            return true
        }
}

答案 1 :(得分:0)

您不应该使用相等比较来检查UI对象。

为了在不同的UI对象上进行协议调用,最好使用标签(或标签,不是首选标签)。

class PaymentViewControllerDummy: UIViewController, UITextFieldDelegate {

    @IBOutlet weak var dobTextField: UITextField!
    @IBOutlet weak var nameTextField: UITextField!

    override func viewDidLoad() {
        super.viewDidLoad()
        dobTextField.delegate = self
    }

    func textFieldShouldBeginEditing(textField: UITextField) -> Bool {
        println(textField.tag)
        println(dobTextField.tag)

        if(textField.tag == dobTextField.tag) {
            println("You are editing date of birth")

            return false
        } else {
            return true
        }
    }
}

如果您不想访问实例变量,那么不要必须引用self,如果您不在某个块(闭包)中。