2016-07-27 20 views
11

フォームツールバーアイテムを更新して、以下のような組み込みのiOSアイコンを使用する簡単なタブレンダラーを作成できます。XamarinフォームiOSレンダラー - ツールバー標準アイコン

NavigationControllerは、私はViewDidLoadでそれをしようとすると、それはNULLあるだけViewWillAppearNULLではありません。

この問題は、TabBar Itemテキストが実際のアイコンに置き換えられる前に点滅することが問題です。

ツールバーの動作をインターセプトする必要がある別の場所はありますか?

[assembly: ExportRenderer(typeof(TabbedPage), typeof(TabRenderer))] 
namespace Cellar.iOS.Renders 
{ 
    public class TabRenderer : TabbedRenderer 
    { 
     public override void ViewWillAppear(bool animated) 
     { 
      base.ViewWillAppear(animated); 

      var list = new List<UIBarButtonItem>(); 

      foreach (var item in NavigationController.TopViewController.NavigationItem.RightBarButtonItems) 
      { 
       if (string.IsNullOrEmpty(item.Title)) 
       { 
        continue; 
       } 

       if (item.Title.ToLower() == "add") 
       { 
        var newItem = new UIBarButtonItem(UIBarButtonSystemItem.Add) 
        { 
         Action = item.Action, 
         Target = item.Target 
        }; 

        list.Add(newItem); 
       } 

       if (list.Count > 0) 
        NavigationController.TopViewController.NavigationItem.RightBarButtonItems = list.ToArray(); 
      } 
     } 
    } 
} 
+0

は 'base.ViewWillAppearを移動しよう(アニメ); '最後に –

+0

これはうまくいきません。 – aherrick

+0

このフラッシュはシミュレータまたは実際のデバイスで表示されますか? –

答えて

1

オーバーライドOnElementChanged方法:

protected override void OnElementChanged(VisualElementChangedEventArgs e) 
    { 
     base.OnElementChanged(e); 

     if(e.NewElement!= null) 
     { 
      var list = new List<UIBarButtonItem>(); 

      // Your code goes here 
     } 
    } 
+0

これは機能しません。 NavigationControllerはこの時点ではNULLです。 – aherrick

1

はい、あなたはPushViewControllerをオーバーライドし、NavigationRenderer方法から継承する必要があります。ここで私は自分のアプリケーションで使用していますものです:

public class CustomToolbarRenderer : NavigationRenderer 
{ 
    public override void PushViewController(UIViewController viewController, bool animated) 
    { 
     base.PushViewController(viewController, animated); 

     List<UIBarButtonItem> newItems = new List<UIBarButtonItem>(); 

     foreach (UIBarButtonItem i in TopViewController.NavigationItem.RightBarButtonItems) 
     { 
      if (i.Title != null) 
      { 
       if (i.Title.Equals(Constants.Toolbar.Add)) 
       { 
        var newItem = new UIBarButtonItem(UIBarButtonSystemItem.Add); 
        newItem.Action = i.Action; 
        newItem.Target = i.Target; 

        newItems.Add(newItem); 
       } 
       else if (i.Title.Equals(Constants.Toolbar.Camera)) 
       { 
        var newItem = new UIBarButtonItem(UIBarButtonSystemItem.Camera); 
        newItem.Action = i.Action; 
        newItem.Target = i.Target; 

        newItems.Add(newItem); 
       } 
       else if (i.Title.Equals(Constants.Toolbar.Delete)) 
       { 
        var newItem = new UIBarButtonItem(UIBarButtonSystemItem.Trash); 
        newItem.Action = i.Action; 
        newItem.Target = i.Target; 

        newItems.Add(newItem); 
       } 
       else 
        newItems.Add(i); 
      } 
      else 
       newItems.Add(i); 
     } 

     TopViewController.NavigationItem.RightBarButtonItems = newItems.ToArray(); 
    } 
} 
+0

ありがとうが、これはタブの切り替えには機能しません。上記の私のサンプルアプリを見てください。 – aherrick

1

は終わりか、必要なコードブロックの実行後に以下のコードを試してみてください...

return base.ViewWillAppear(animated); 
関連する問題