2016-07-27 14 views
11

Ich kann einen einfachen Tab-Renderer erstellen, der meine Forms ToolBarItems aktualisiert, um die eingebauten iOS-Symbole wie unten zu verwenden.Xamarin Forms iOS-Renderer - ToolBar Standard-Icons

NavigationController nicht nur NULL in ViewWillAppear ist, wenn ich es in ViewDidLoad versuchen, ist es NULL.

Das Problem dabei ist, dass Sie den TabBar Item-Text anzeigen, bevor er durch das aktuelle Symbol ersetzt wird.

Gibt es einen anderen Ort, an dem ich das ToolBar-Verhalten abfangen sollte?

[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

Versuchen Sie, die 'base.ViewWillAppear zu bewegen (animiert); 'bis zum Ende –

+0

Das funktioniert nicht, danke aber. – aherrick

+0

Erhalten Sie diesen Blitz am Simulator oder am echten Gerät? –

Antwort

1

Überschreibung OnElementChanged Methode:

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

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

      // Your code goes here 
     } 
    } 
+0

dies funktioniert nicht. NavigationController ist an dieser Stelle NULL. – aherrick

1

Ja, sollten Sie die PushViewController außer Kraft setzen und von NavigationRenderer Methode erben. Hier ist, was ich in meiner Anwendung verwende:

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

danke, aber das funktioniert nicht für Tab-Switching. Siehe meine Beispielanwendung oben. – aherrick

1

Versuchen Sie, den folgenden Code am Ende oder nach der Ausführung der erforderlichen Codeblock ...

return base.ViewWillAppear(animated);