ios - 如何区分委托(delegate)方法中的 UITextFields?

标签 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 或标识符吗?

最佳答案

您可以使用以下两种方法之一做出此决定: socket 或标签。对于 socket 方法,声明一个 socket 实例变量(使用 IBOutlet 关键字),然后建立 socket 连接。在您的委托(delegate)方法中,使用指针比较来测试传入的文本对象是否与导出引用的对象相同。
例如,假设您声明并连接了一个名为 SSN 的 socket 。您的代码可能类似于 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
}

关于ios - 如何区分委托(delegate)方法中的 UITextFields?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33584474/

相关文章:

ios - Xcode 9.2 在打开 Product --> Profile 后崩溃

ios - 将字符串 EST 时间转换为本地时间

ios - 在 iOS 模拟器上模拟 MFMailComposeViewController。只需要显示 Composer

ios - 使用协议(protocol)传递数据而不返回原始 Controller

ios - 你如何调试 Swift PlaygroundBook?

swift - 在 Cocoa 中使用 Swift 运行 Shell 脚本

ios - View Controller 不会初始化

ios - 按钮文本出现在框架之外

c# - 回调函数

ios - 委托(delegate)方法不会触发(为空)。使用圆弧