Попытка передать UIElement в качестве параметра в функцию - PullRequest
1 голос
/ 28 марта 2019

Я хотел бы передать UIElement в качестве параметра функции в Swift.По сути, я не хотел бы повторяться снова и снова для разных элементов в некоторых дочерних ВК, поэтому я ищу удобную функцию, которая выглядит аккуратнее.Я добавляю доступ к своему приложению и хотел бы иметь функцию, которая устанавливает его идентификатор и метку в удобной функции, см. Ниже.

Это то, что у меня есть, вместо этого я хотел бы использовать универсальный параметр 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 ]

1 голос
/ 28 марта 2019

Вы можете написать следующую функцию для 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")`
0 голосов
/ 28 марта 2019

Почему вы передаете объект viewCOntroller методу. просто создайте метод и передайте ему свой элемент интерфейса. я создал 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...