尝试将UIElement作为参数传递给函数

时间:2019-03-28 11:28:42

标签: swift

我想将UIElement作为Swift中函数的参数传递。基本上,我不想对某些儿童VC的不同元素一遍又一遍地重复自己,因此我正在寻找一种看起来更整洁的便捷功能。我正在为我的应用程序添加可访问性,并且希望有一个可以在方便的功能中设置其标识符和标签的功能,请参见下文。

这是我目前拥有的,我想要一个通用的UIElement参数而不是当前拥有的当前UITextField,因此我也可以在其他元素(例如UIButtons等)上使用该函数。

let textFieldEdit = "Text Field. double tap to edit."

        nvc.firstNameTextField.isAccessibilityElement = true
        nvc.firstNameTextField.accessibilityIdentifier = "First name"
        nvc.firstNameTextField.accessibilityLabel = "First name \(textFieldEdit)"

但是我真的很喜欢以下内容。...

func accessibilityElement(name:String, vc:UIViewController, element:UITextField) {
        let textFieldEdit = "Text Field. double tap to edit."

        vc.element.isAccessibilityElement = true
        vc.element.accessibilityIdentifier = name
        vc.element.accessibilityLabel = "\(name) \(textFieldEdit)"
    }

我目前在函数中的每一行都收到以下错误。

  

'UIViewController'类型的值没有成员'element';你的意思是   “礼物”?

2 个答案:

答案 0 :(得分:1)

您可以为UITextField

编写以下函数
func accessibilityElement(name: String, element: UITextField) {
    let textFieldEdit = "Text Field. double tap to edit."

    element.isAccessibilityElement = true
    element.accessibilityIdentifier = name
    element.accessibilityLabel = "\(name) \(textFieldEdit)"
}

您可以概括任何UIView,使其适用于其他元素,例如UIButton

func accessibilityElement(name: String, element: UIView) {
    let textFieldEdit = "Text Field. double tap to edit."

    element.isAccessibilityElement = true
    element.accessibilityIdentifier = name
    element.accessibilityLabel = "\(name) \(textFieldEdit)"
}

对于extension,您也可以将其写为UIView

extension UIView {
    func setAccessibility(name: String) {
        let textFieldEdit = "Text Field. double tap to edit."

        isAccessibilityElement = true
        accessibilityIdentifier = name
        accessibilityLabel = "\(name) \(textFieldEdit)"
    }
}

然后您可以这样称呼:

textField.setAccessibility(name: "someTextField") 
button.setAccessibility(name: "someButton")`

答案 1 :(得分:0)

为什么将viewCOntroller对象传递给方法。只需创建一个方法并将您的UI元素传递给它即可。 我在其中创建了一个NSObject类和方法来处理此事

  class accessibilityHelper : NSObject {
        class func accessibilityElement(name:String, element:UIView) {
            let textFieldEdit = "Text Field. double tap to edit."

            element.isAccessibilityElement = true
            element.accessibilityIdentifier = name
            element.accessibilityLabel = "\(name) \(textFieldEdit)"
        }
    }

并像这样使用

accessibilityHelper.accessibilityElement(name: "My TextFiled", element: textField)

通过使用此方法,可以将可访问性属性设置为任何viewController的任何文本字段