swift - 获取 Swift 4 中 UITextField 的字段名称

标签 swift

我正在尝试获取 UITextField 的名称以在 shouldChangeCharactersIn 中使用。 (我已经在使用 .tag 来保存一些其他数据)。我试图使用我转换为 Swift 4 的代码:

func propertyName(_ property: Any?) -> String? {
    var numIvars: UInt = 0
    var key: String? = nil
    let ivars: Ivar? = class_copyIvarList(type(of: self), numIvars)
    for i in 0..<Int(numIvars) {
        let thisIvar = ivars[i] as? Ivar
        if (object_getIvar(self, thisIvar) == property) {
            key = String(utf8String: ivar_getName(thisIvar))
            break
        }
    }
    free(ivars)
    return key
}

我发现了here但收到错误“无法将类型 'UInt' 的值转换为预期参数类型 'UnsafeMutablePointer?”

我的目标是确定当前选择哪个 UITextField 进行编辑(我需要根据使用 shouldChangeCharactersIn 编辑的字段来限制最大字符数)。

提前致谢。

更新#1:我无法将 UITextFields 与导出属性进行比较,因为这些字段是 TableView 的一部分并且是动态创建的。

最佳答案

当我到达 shouldChangeCharactersIn 时,我能够识别 UITextField 的名称。如果有人有更好的方法,请发布它,但这对我来说非常有效。以下是解决该问题的步骤:

  1. 创建 View Controller 的全局变量来保存正在编辑的字段的名称:

    var strCurrentFieldEditing: String = ""

  2. 在 TableView 的 cellForRowAt 函数中,添加事件目标来处理每个 UITextField 单元格的“编辑已开始”。设置每个文本字段调用不同的函数:

    txtFirstName.addTarget(self, action:#selector(self.firstNameEditingDidBegin), for: .editingDidBegin)

    txtLastName.addTarget(self, action:#selector(self.lastNameEditingDidBegin), for: .editingDidBegin)

  3. 在每个函数中,将字符串设置为正在编辑的文本字段:

    @objc func firstNameEditingDidBegin(_ textField: UITextField) { strCurrentFieldEditing = "名字" }

    @objc func lastNameEditingDidBegin(_ textField: UITextField) { strCurrentFieldEditing = "姓氏" }

  4. 现在,当执行shouldChangeCharactersIn函数时,您可以确定正在编辑哪个字段:

    func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool { 切换 strCurrentFieldEditing { 案例“名字”: //正在编辑名字字段... 休息 案例“姓氏”: //姓氏字段正在编辑... 休息 }

这就是大家。当然,如果您不使用 .tag 属性,那将是最简单的方法,就我而言,我将 .tag 属性用于其他用途。如果有人有更好/更简单的方法来做到这一点,请发布您的解决方案。

关于swift - 获取 Swift 4 中 UITextField 的字段名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49678723/

相关文章:

swift - 如何使用 Swift NSDate 通过取消每个星期日在我的日期数组中保留 future 5 天

ios - 使开关功能正常工作

Swift UIActivityViewController 电子邮件主题行继承全局 UINavigationBar 字体更改

ios - 无法反转表格 View

ios - 单元测试未编译 - Swift Xcode 9.2

ios - Swift Playground - "Use of unresolved identifier ' myClass'"但仍然可以编译

json - 从 AWS Lambda 函数解析 JSON 答案

ios - 如何使用 swift 将 UIVIewController 名称作为参数传递给特定函数?

ios - 自定义tableviewCell内容宽度与tableView不同

ios - 如何在我的 UINavigationBar 后面获得模糊效果