2016-07-27 7 views
11

Я могу создать простой вкладчик Renderer, который обновит мои Forms ToolBarItems, чтобы использовать встроенные значки iOS, как показано ниже.Xamarin Forms iOS Renderer - ToolBar Стандартные значки

NavigationController только НЕ NULL в ViewWillAppear Если я пытаюсь его в ViewDidLoad, это NULL.

Проблема заключается в том, что вы получаете вспышку текста элемента TabBar до того, как она будет заменена фактическим значком.

Есть ли другое место, в котором я должен перехватывать поведение ToolBar?

[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

Try код ниже в конце или после выполнения требуемого блока кода ...

return base.ViewWillAppear(animated); 
Смежные вопросы