在Swift 4

时间:2018-04-05 18:02:47

标签: 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与outlet属性进行比较,因为这些字段是tableview的一部分并且是动态创建的。

2 个答案:

答案 0 :(得分:0)

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

  1. 为视图控制器创建一个全局变量,以保存正在编辑的字段的名称:

    var strCurrentFieldEditing:String =“”

  2. 在表视图的cellForRowAt函数中,添加事件目标以处理每个UITextField单元格的Editing Did Begin。设置每个文本字段以调用不同的函数:

    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 =“firstName” }

    @objc func lastNameEditingDidBegin(_ textField:UITextField) {     strCurrentFieldEditing =“lastName” }

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

    func textField(_ textField:UITextField,shouldChangeCharactersIn范围:NSRange,replacementString string:String) - &gt;布尔 {     切换strCurrentFieldEditing     {         case“firstName”:             //正在编辑firstName字段...             打破         case“lastName”:             //正在编辑lastName字段...             打破     }

  5. 那就是所有人。当然,如果你不使用.tag属性,这将是最简单的方法,在我的情况下,我使用.tag属性来做其他事情。如果有人有更好/更简单的方法,请发布您的解决方案。

答案 1 :(得分:0)

您可以在身份检查器>可访问性中为属性accessibilityIdentifier设置名称。

然后您可以使用它来了解您所指的字段:

喜欢这个=>

如果yourTextField.accessibilityIdentifier ==“某物” {

//做点事情

}