我想将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';你的意思是 “礼物”?
答案 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的任何文本字段