gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 11:36:46 24 4
gpt4 key购买 nike

我正在尝试获取 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com