2013-03-22 5 views
9

アプリでVoice Overサポートを改善しようとしています。私にはUISearchBarがあります。 showBookMarksプロパティをYESに設定しました。UISearchBarのブックマークアイコンにアクセスするには?

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

問題は、Voice Overをオンにするとブックマークアイコンを有効にすることができないことです。テキストを入力すると、「クリア」アイコンが表示され、期待どおりに選択して有効にすることができます。しかし、テキストが消去され、ブックマークアイコンが表示されたら、それを選択することはできません。どこにタップしても、ボイスオーバー矩形は常にアイコンを含む検索バー全体を囲みます。

UIImageのアイコンのaccessibilityLabelaccessibilityTraitsのプロパティを設定しようとしました。 UIImageisAccessibilityElementプロパティをYESに設定しました。何も動作していないようです。

UISearchBarのブックマークアイコンにアクセスするために必要な手順を知っている人はいますか?

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]; 

追加情報:

私は検索バーがUISearchDisplayControllerに接続されているUITableViewControllerで使用されていることを言及する必要があります

はここで検索バーの完全なコードです。検索バーがテーブルビューのheaderViewとして設定されています。

これはすべてコードで行われます。ストーリーボードやxibは関係ありません。

答えて

4

多量のデバッグの後、私は答えを見つけました。ボイスオーバーがUISearchBarのブックマークアイコンのカスタムアイコンを認識するためには、アイコンが正確に正しいサイズでなければなりません。

使用する画像は40x29px(網膜版では80x58px)でなければなりません。その他のサイズであれば、アイコンはVoice Overで認識されません。

私の画像は38x31px(および68x62px)でした。

オリジナルの質問に投稿したコードはすべて正しいです。イメージのサイズが更新されると、すべてが期待通りに機能し始めました。コードの唯一の変更は、もはや必要ではなかったsetPositionAdjustment:forSearchBarIcon:への呼び出しの削除でした。

アイコンサイズのような小さな違いが、カスタムアイコンで作業しているVoice Overと作業していないという違いがある理由をイメージすることはできません。しかしそこにはあります。私はこれが将来誰かを助けることを願っています。

+0

@downvoter downvoteを説明してください。私が持っていた問題の正確な答えを投稿しました。この場合、Voice Ovetを正しく動作させるためには、これは文書化されていません。 – rmaddy

+0

UISearchBarIconBookmarkのサイズが40x29pxになるはずの場所を説明してください。最小サイズ、最大サイズ、正確なサイズ、または正確な比率ですか?私は他のいくつかのサイズで動作させることができましたが、どれが推奨されているのか分かりません。 –

+0

試行錯誤して見つけました。私の元のサイズは機能しませんでした。私は指定されたサイズを試したとき、それは働き始めた。私は他の組み合わせをテストしなかったので、他のサイズも動作する可能性は確かです。動作する他のサイズが分かっている場合は、他のサイズが役に立つように投稿してください。 – rmaddy

1

あなたの質問にコードを実行しました。ブックマークボタンはVoiceOver経由でアクセスできるように見えます。

enter image description here

は、あなたのインターフェースに干渉だ何か他のものがあるだろうか?ブックマークボタンの上に表示される見えないビューカスタムクリアボタンを設定していますか?あなたが提供できるその他の詳細は?

しかし、あなたが渡しているaccessibilityLabelを使用していないことは本当です。それはちょうど "ボタン"を使用して、それは吸う。私はおそらくUIKitのバグだと言いたいです - あなたはfile a bugです。

+1

ありがとうございました。私が言及することを怠ったことの一つは、検索バーが 'UITableViewControler'と' UISearchDisplayController'で使われていることです。検索バーはテーブルビューの 'headerView'として設定されます。私は新しいプロジェクトを作成し、一度に1つずつ追加して、それが私のために働くのを止めさせるものを見なければならないと思う。 – rmaddy

+0

良いアイデア - VoiceOverを妨害する 'UITAbleViewController'の中に何かがある可能性があります。 –

+0

検索バーのカスタムアイコンを実際に設定しましたか?簡単なテストプロジェクトを作成しました。デフォルトのブックマークアイコンを使用すると、アイコンボタンにアクセスできます。しかし、自分のカスタムブックマークアイコンを適用すると、すぐにアクセスできなくなります。 – rmaddy

関連する問題