我不确定为什么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
控制台结果:
我错过了什么吗?
修改
以下是“界面”构建器屏幕
注
我创建了一个独立的项目并将代码复制到项目中,但是它应该工作,但它不能在这个项目中工作。可能是StoryBoard
吗?
答案 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
,如果您不在某个块(闭包)中。