Como tornar o ícone de favoritos de um UISearchBar acessível?

9

Estou tentando melhorar o suporte ao Voice Over em um aplicativo. Eu tenho um código%. Eu defini a propriedade UISearchBar como showBookMarks . E eu configurei uma imagem personalizada com:

[searchbar setImage:icon forSearchBarIcon:UISearchBarIconBookmark state:UIControlStateNormal];

O problema que tenho é que com o Voice Over ativado, não há como ativar o ícone de favoritos. Se eu inserir texto, o ícone "limpar" será exibido e poderá ser selecionado e ativado conforme o esperado. Mas quando o texto é limpo e o ícone dos meus favoritos aparece, não é possível selecioná-lo. Não importa onde eu toque, o retângulo de Voice Over sempre envolve toda a barra de pesquisa, incluindo os ícones.

Eu tentei definir as propriedades YES e accessibilityLabel no accessibilityTraits do ícone. Defina a propriedade UIImage UIImage como isAccessibilityElement . Nada parece funcionar.

Alguém sabe quais etapas são necessárias para tornar o ícone de favoritos em um YES acessível?

Este é o código completo da barra de pesquisa:

UISearchBar *bar = [[UISearchBar alloc] init];
[bar sizeToFit];
bar.autoresizingMask = UIViewAutoresizingFlexibleWidth;
bar.placeholder = @"Search listed items";
bar.autocapitalizationType = UITextAutocapitalizationTypeNone;
bar.autocorrectionType = UITextAutocorrectionTypeNo;
bar.keyboardType = UIKeyboardTypeDefault;
bar.showsBookmarkButton = YES;
bar.text = @"";

UIImage *icon = [UIImage imageNamed:@"bookmarks.png"];
icon.accessibilityLabel = @"Bookmarks";
icon.accessibilityTraits = UIAccessibilityTraitButton;
icon.isAccessibilityElement = YES;
[bar setImage:icon forSearchBarIcon:UISearchBarIconBookmark state:UIControlStateNormal];
[bar setPositionAdjustment:UIOffsetMake(-1, -1) forSearchBarIcon:UISearchBarIconBookmark];

Informações adicionais:

Devo mencionar que a barra de pesquisa é usada com um UISearchBar conectado a um UITableViewController . A barra de pesquisa está sendo definida como UISearchDisplayController da exibição da tabela.

E tudo isso é feito no código. Não há storyboards ou xibs envolvidos.

    
por rmaddy 22.03.2013 в 15:44
fonte

2 respostas

4

Após um monte de depuração, encontrei a resposta. Para que o Voice Over reconheça um ícone personalizado para o ícone de favoritos de um UISearchBar , o ícone deve ter exatamente o tamanho correto.

As imagens usadas devem ser 40x29px (80x58px para a versão retina). Qualquer outro tamanho e os ícones não são reconhecidos pelo Voice Over.

Minhas imagens foram 38x31px (e 68x62px).

O código que postei na minha pergunta original está correto. Depois que as imagens foram atualizadas em tamanho, tudo começou a funcionar como esperado. A única alteração no código foi a remoção da chamada para setPositionAdjustment:forSearchBarIcon: , que não era mais necessária.

Eu não posso imaginar por que uma diferença tão pequena no tamanho dos ícones seria a diferença entre o Voice Over trabalhar com ícones personalizados e não funcionar. Mas aí está. Espero que isso ajude alguém no futuro.

    
por rmaddy 22.03.2013 / 23:33
fonte
1

Eu executei o código em sua pergunta e o botão de favoritos parece estar acessível por meio do VoiceOver.

Poderiahaveralgomaisinterferindonasuainterface?Quaisquervistasinvisíveisquepossamencontraroseucaminhonotopodobotãodosfavoritos?Vocêestáconfigurandoumbotãoclaropersonalizado?Qualqueroutrodetalhequevocêpossafornecer?

Noentanto,éverdadequenãoestáusandooaccessibilityLabelquevocêestápassando;apenasusa"Button", o que é uma droga. Eu diria que é provavelmente um bug no UIKit - você deve arquivar um bug .

    
por Ash Furrow 22.03.2013 / 15:56
fonte