[Résolu] UISearchBar et UIAccessibility

iLandesiLandes Membre
septembre 2016 modifié dans API UIKit #1

Petit problème du dimanche soir. Je fais une application conforme à  UIAccessibility (support de Voice Over). Je voudrais personnaliser les informations du bouton clear (la petite croix qui s'affiche dans le champs de recherche quand l'utilisateur saisi des données). A ne pas confondre avec le bouton cancel.


 


Je voudrais récupérer ce bouton mais je ne trouve pas son nom dans les docs pour faire un truc du genre 



let uiButton = searchBar.valueForKey("cancelButton") as! UIBarButtonItem
uiButton.accessibilityLabel = NSLocalizedString("Clear Text", comment: "")

Le but étant de remplacer ce texte qui n'est pas traduit en français. Actuellement l'accessibilityLabel est égal à  "Clear Text".


 


Si vous avez des piste ou simplement la manière de trouver les clés disponibles avec valueForKey pour les UISearchBar. D'avance merci ;-)


Réponses

  • Joanna CarterJoanna Carter Membre, Modérateur
    septembre 2016 modifié #2

    Quelque chose comme :



    class ViewController: UIViewController, UISearchBarDelegate
    {
    @IBOutlet weak var searchBar: UISearchBar!

    weak var btnCancel: UIButton?

    override func viewDidLoad()
    {
    super.viewDidLoad()

    for subView in searchBar.subviews
    {
    for subSubView in subView.subviews
    {
    if subSubView.isKindOfClass(UIButton)
    {
    btnCancel = subSubView as? UIButton

    btnCancel?.isAccessibilityElement = true

    btnCancel?.accessibilityLabel = NSLocalizedString("Clear Text", comment: "")
    }
    }
    }
    }
    }

  • iLandesiLandes Membre
    septembre 2016 modifié #3

    Merci Joanna


     


    La boucle ne trouve aucun UIButton. Je l'ai testée dans viewDidLoad, et dans searchBar(searchBar: UISearchBar, textDidChange searchText: String) et dans searchBarTextDidBeginEditing sans résultat.


  • Joanna CarterJoanna Carter Membre, Modérateur
    septembre 2016 modifié #4
    Si le bouton n'est pas visible, il n'existe pas dans les sous-vues
  • C'est bien là  mon problème. Comment trouvé ce bouton ?


     


    Merci encore pour ton aide


  • Potentiellement une idée : Utiliser UIAppearance pour renommer tous ces buttons clear, car la UISearchBar doit implémenter un UITextField quelque part (même si ce n'est pas accessible) : http://stackoverflow.com/a/31862284/1801544


  • Joanna CarterJoanna Carter Membre, Modérateur
    septembre 2016 modifié #7

    Pardonnes-moi. Je pensais que tu parlais du bouton Cancel quand tu parlais du bouton "clear" car tu as cherché pour "cancelButton".


     


    Du coup :



    @IBOutlet weak var searchBar: UISearchBar!

    override func viewDidLoad()
    {
    super.viewDidLoad()

    for subView in searchBar.subviews
    {
    for sView in subView.subviews
    {
    if let textField = sView as? UITextField,
    let clearButton = textField.valueForKey("clearButton") as? UIButton
    {
    clearButton.isAccessibilityElement = true

    clearButton.accessibilityLabel = NSLocalizedString("Clear Text", comment: "")
    }
    }
    }
    }
  • iLandesiLandes Membre
    septembre 2016 modifié #8


     


    Pardonnes-moi. Je pensais que tu parlais du bouton Cancel quand tu parlais du bouton "clear" car tu as cherché pour "cancelButton".




     


    Sans problème. Merci beaucoup Joanna. J'avais posé la question sur Stack 


     


    Je t'ai mis une petite dédicace du coup.


Connectez-vous ou Inscrivez-vous pour répondre.