【发布时间】:2018-04-05 18:02:46
【问题描述】:
我正在尝试获取 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 与 outlet 属性进行比较,因为这些字段是 tableview 的一部分并且是动态创建的。
【问题讨论】:
-
这是错误的方法。将
textField参数与您的文本字段 outlets/properties 进行比较。无需获取名称。 -
rmaddy 感谢您的意见。这些字段是在表格视图中动态创建的。它们没有连接到插座。
-
如果文本字段是动态的,您将没有每个文本字段的属性。你为什么不完全重写你的问题来解释你需要解决的实际问题,这将是关于知道正在编辑哪个文本字段你会得到更好的帮助,而不是询问对实际问题的错误解决方案的问题。
-
rmaddy,我已经用相关信息更新了问题,说明这些字段是动态创建的。
-
不,摆脱您发布的代码并用相关的表格视图代码和相关的文本字段委托代码等替换它。解释您的实际基本问题。您无需获取属性名称。这是错误的解决方案。
标签: swift