如何在委托方法中区分UITextFields?

时间:2015-11-07 15:35:55

标签: ios swift delegates uitextfield

我有以下代码:

class ViewController: UIViewController, UITextFieldDelegate {

    // MARK: Properties
    @IBOutlet weak var layersTextField: UITextField!
    @IBOutlet weak var innerShapeTextField: UITextField!
    @IBOutlet weak var outerShapeTextField: UITextField!

    override func viewDidLoad() {
        super.viewDidLoad()

        layersTextField.delegate = self
        innerShapeTextField.delegate = self
        outerShapeTextField.delegate = self
    }

    // MARK: UITextFieldDelegate
    func textFieldShouldReturn(textField: UITextField) -> Bool {
        textField.resignFirstResponder()
        return true
    }

    func textFieldDidEndEditing(textField: UITextField) {
        // do something
    }

}

现在在textFieldDidEndEditing(_:)我想做点什么,取决于UITextField调用此方法。
有什么方法可以区分,UITextField这样做了吗?我可以在UITextField上设置某种ID或标识符吗?

3 个答案:

答案 0 :(得分:2)

您可以使用以下两种方法之一进行此确定:出口或标签。对于插座方法,声明一个插座实例变量(使用IBOutlet关键字),然后建立插座连接。在您的委托方法中,使用指针比较来测试传入的文本对象是否是出口引用的同一对象 例如,假设您声明并连接名为SSN的插座。您的代码可能类似于Listing 3-1

- (BOOL)textFieldShouldEndEditing:(UITextField *)textField {
    if (textField == SSN) {
        // ...
        return NO;
    }
    return YES;
}

// Translated to Swift:

func textFieldShouldEndEditing(textField: UITextField) -> Bool {
    if textField === SSN {
        // ...
        return false
    }
    return true
}

答案 1 :(得分:1)

您可以通过下一个提交的名称进行检查。 if textField == layersTextField { //do what you want }您可以为需要执行特定操作的任何文本字段执行此操作。

答案 2 :(得分:0)

您可以改为创建IBAction:

enter image description here