Xamarin.Forms: NavigationController является нулевым в PageRenderer - PullRequest
0 голосов
/ 03 мая 2018

Я пытаюсь использовать PageRenderer для настройки / изменения положения элементов ToolbarItem для iOS, но здесь NavigationController выдает исключение нулевой ссылки. Ниже мой код

   public class MyNavigationRenderer: PageRenderer
    {    
        public new MyNavigationBar Element
        {
            get { return (MyNavigationBar)base.Element; }
        }
        public override void ViewWillAppear(bool animated)
        {
            base.ViewWillAppear(animated);
            var LeftNavList = new List<UIBarButtonItem>();
            var rightNavList = new List<UIBarButtonItem>();
            var navigationItem = this.NavigationController.TopViewController.NavigationItem;

            for (var i = 0; i < Element.ToolbarItems.Count; i++)
            {
                var reorder = (Element.ToolbarItems.Count - 1);
                var ItemPriority = Element.ToolbarItems[reorder - i].Priority;

                if (ItemPriority == 1)
                {
                   UIBarButtonItem LeftNavItems = navigationItem.RightBarButtonItems[i];
                   LeftNavList.Add(LeftNavItems);
                }
                else if (ItemPriority == 0)
                {
                   UIBarButtonItem RightNavItems = navigationItem.RightBarButtonItems[i];
                   rightNavList.Add(RightNavItems);
                }
            }
             navigationItem.SetLeftBarButtonItems(LeftNavList.ToArray(), false);
             navigationItem.SetRightBarButtonItems(rightNavList.ToArray(), false);
        }
    }

Ниже MyNavigationBar.cs класс в переносимых / общих формах проекта

public class MyNavigationBar : NavigationPage
{
    public MyNavigationBar(Page content) : base(content)
    {
        Init();
    }
    private void Init()
    {
        this.ToolbarItems.Add(new ToolbarItem() { Icon = "kid", Priority = 0, Order = ToolbarItemOrder.Primary });
        this.ToolbarItems.Add(new ToolbarItem() { Text = "License", Priority = 0, Order = ToolbarItemOrder.Primary });
    }    
} 

Запуск приложения

public App ()
{
    InitializeComponent();
    MainPage = new MyNavigationBar(new LoginPage());
} 

См. Скриншот ниже получения исключения

enter image description here

1 Ответ

0 голосов
/ 27 мая 2018

Я столкнулся с этой проблемой, но в моем случае я пытался получить NavigationController со страницы содержимого, на которой не было NavigationController, убедитесь, что перед вызовом TopViewController вы проверили нулевую проверку,

 var navController = this.NavigationController;
 if(navController == null)
 {
     return;
 }
 UINavigationItem navigationItem = navController.TopViewController.NavigationItem;

Например, Когда пользователь откроет приложение, ему будет представлена ​​страница входа, на которой не было панели навигации.

...