Ios textFieldShouldBeginEditing未为Swift 1.2中的正确textfield触发

Ios textFieldShouldBeginEditing未为Swift 1.2中的正确textfield触发,ios,swift,uitextfield,uitextfielddelegate,Ios,Swift,Uitextfield,Uitextfielddelegate,我不知道为什么textfield应该开始编辑返回所有UiTextField 文件:PaymentViewControllerDummy.swift class PaymentViewControllerDummy: UIViewController, UITextFieldDelegate { @IBOutlet weak var dobTextField: UITextField! @IBOutlet weak var nameTextField: UITextField

我不知道为什么textfield应该开始编辑返回所有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
        }
    }
}
所有IB插座均已连接。这是非常标准的代码。我一次又一次地这样做,但是无论我按下哪个文本字段,textfield==self.dobTextField都会返回true

控制台结果:

我错过什么了吗

编辑

以下是界面生成器屏幕


我做了一个独立的项目,并复制到项目的代码,它的工作,因为它应该但它不是在这个项目工作。它可能是故事板中的某个内容吗?

在文本字段编辑方法中访问文本字段的最佳方式是通过标记。设置两个文本字段的标记,比如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
        }
}

您不应该使用相等比较来检查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。

是否仔细检查了插座是否正确连接?它可能是两个插座连接到你故事板上的同一个文本字段…现在,我已经用Interface Builder的快照更新了这个问题还有其他来自文本字段的连接吗?签入连接检查器,或按住ctrl键单击该字段。看起来这两个字段都连接到了dobTextField,因为它们都返回相同的标记,并且都触发了事件,即使只有dobTextField是唯一一个设置了它的代理的字段,单击name文本字段不应该做任何事情。尝试删除两个字段的所有连接,并将它们重新连接到各自的插座。我完全删除了Main.StoryBoard。然后重新创建字段,结果相同。我创建了一个新项目,做了同样的事情,一切都很好。很奇怪!刚刚更新了我的问题。这没什么区别。即使在我打开时,情况也会过去nameTextField@MrH您是否尝试打印每个?我已更新控制台打印输出。首先我点击了dobTextField,然后点击了nameTextField,这两个字段都得到了相同的结果。@MrH看起来您为文本字段定义了类似的标记。首先在IB中更改它们,如果它不能解决问题,则以编程方式更改它们。在每一步、构建和运行中清理项目。我按编程方式设置标记,但仍然是一样的。有一件事,尽管我还有2个UITextField,但它没有任何内容,即使我点击它们,委托也会触发。那些UITextFields甚至没有IBOutlet。只是更新了我的问题。这没什么区别。即使我点击nameTextField,条件也会通过