简体   繁体   English

Xamarin.Forms:PageRenderer中的NavigationController为null

[英]Xamarin.Forms: NavigationController is null in PageRenderer

I am trying to use PageRenderer to customize/reposition elements of ToolbarItem for iOS but here NavigationController throwing null reference exception. 我正在尝试使用PageRenderer为iOS定制/重新定位ToolbarItem元素,但在此NavigationController抛出空引用异常。 Below my code 在我的代码下面

   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);
        }
    }

Below MyNavigationBar.cs class in portable/shared forms project 可移植/共享表单项目中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 });
    }    
} 

App starting 应用启动

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

See below screenshot getting exception 看到下面的截图获取异常

在此处输入图片说明

I faced this issue, but in my case, I was trying to get NavigationController from content page which didn't had NavigationController, make sure you null check before calling TopViewController, 我遇到了这个问题,但就我而言,我试图从没有NavigationController的内容页面获取NavigationController,请确保在调用TopViewController之前先进行null检查,

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

For example, When User opens the app, he will be presented with Login page, which didn't had any Navigation Bar. 例如,当用户打开应用程序时,将向他显示“登录”页面,该页面没有任何导航栏。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM