2017-09-06 3 views
1

マイXamarin.Formsアプリのメインページには、以下のようになりますMasterDetailPageで構成されていますMasterDetailPageアイコンVoiceOverにアクセスするにはどうしたらいいですか?

<MasterDetailPage ...> 
    <MasterDetailPage.Master> 
     <v:MasterMenuPage Title="Menu" Icon="icon_hamburger.png" /> 
    </MasterDetailPage.Master> 
    <MasterDetailPage.Detail> 
     ... 
    </MasterDetailPage.Detail> 
</MasterDetailPage> 

私がアクティブのVoiceOverとiOSの10の私のアプリに「聴く」しようとしたとして、私は声がメニューを読み込むことに気づきましたアイコンをMenuの代わりにIcon Hamburgerとしてください。

この問題を解決するためにアクセシビリティテキストを設定するにはどうすればよいですか?

+0

は、追加しようとしている[アクセシビリティ効果](https://developer.xamarin.com/guides/xamarin-forms/advanced/アクセシビリティ/)? – Damian

+0

私はそれを試みましたが、成功しませんでした。 – Physikbuddha

+0

あなたのポストにエフェクトコードを追加して、起こったことの説明付きで – Damian

答えて

0

Xamarin.Formsソースコードと、そのナビゲーション項目の作成方法について説明します。あなたがそのアイコンのアクセシビリティラベルを設定できる唯一の方法は、NavigationPage用のカスタムレンダラーを作成することです。

この例では、ラベルを正しく設定しています。

[assembly: ExportRenderer(typeof(NavigationPage), typeof(stackoverflowexample.iOS.CustomNavigationPageRenderer))] 
namespace stackoverflowexample.iOS 
{ 
    public class CustomNavigationPageRenderer : NavigationRenderer 
    { 
     protected override void OnElementChanged(VisualElementChangedEventArgs e) 
     { 
      base.OnElementChanged(e); 

      var button = GetNavigationButton(); 

      if (button == null) return; 

      button.AccessibilityLabel = GetMasterPageTitle(); 

     } 

     UIBarButtonItem GetNavigationButton() 
     { 
      var nav = this.NativeView.Subviews.OfType<UINavigationBar>().FirstOrDefault(); 

      var navItem = nav.Items.FirstOrDefault(x => x.LeftBarButtonItem != null); 

      return navItem?.LeftBarButtonItem; 
     } 

     string GetMasterPageTitle() 
     { 
      var parentPages = ((Page)Element).GetParentPages(); 
      var masterDetail = parentPages.OfType<MasterDetailPage>().FirstOrDefault(); 

      return masterDetail?.Master?.Title; 
     } 
    } 
} 
関連する問題