gpt4 book ai didi

c# - Xamarin Forms - CustomRenderer 在导航离开后不工作

转载 作者:行者123 更新时间:2023-11-30 17:27:10 25 4
gpt4 key购买 nike

我在我的主页的 iOS native 代码中有一个自定义渲染器。当应用程序启动时它工作得很好,并使用我想要的 iOS 系统图标呈现 Navbar 项目。但是,如果我离开主页,当我导航回来时,RightBarButtonItems 数组只包含两个未实例化的对象,我会检查 (RightNavItems.Title == null ) 在这种情况下继续查看会发生什么,并且确实没有呈现项目,如果我导航离开并再次返回应用程序崩溃,因为 RightBarButtonItems 数组现在为空。

为什么导航回主页时工具栏项目未初始化?在这样的自定义渲染器中处理导航的正确方法是什么?

这是自定义渲染器的代码:

public class ItemsPageRenderer : PageRenderer
{
public new ItemsPage Element
{
get { return (ItemsPage)base.Element; }
}

public override void ViewWillAppear(bool animated)
{
base.ViewWillAppear(animated);

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;

UIBarButtonItem RightNavItems = navigationItem.RightBarButtonItems[i];
if (RightNavItems.Title == null)
continue;

if (RightNavItems.Title.ToLower() == "add")
{
rightNavList.Add(new UIBarButtonItem(UIBarButtonSystemItem.Add)
{
Action = RightNavItems.Action,
Target = RightNavItems.Target
});
}
else if (RightNavItems.Title.ToLower() == "edit")
{
rightNavList.Add(new UIBarButtonItem(UIBarButtonSystemItem.Edit)
{
Action = RightNavItems.Action,
Target = RightNavItems.Target
});
}
else
{
rightNavList.Add(RightNavItems);
}
}

navigationItem.SetRightBarButtonItems(rightNavList.ToArray(), false);
}
}

最佳答案

检查这段代码

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;

UIBarButtonItem RightNavItems = navigationItem.RightBarButtonItems[i];
if (RightNavItems.Title == null)
continue;

if (RightNavItems.Title.ToLower() == "add")
{
rightNavList.Add(new UIBarButtonItem(UIBarButtonSystemItem.Add)
{
Action = RightNavItems.Action,
Target = RightNavItems.Target
});
}
else if (RightNavItems.Title.ToLower() == "edit")
{
rightNavList.Add(new UIBarButtonItem(UIBarButtonSystemItem.Edit)
{
Action = RightNavItems.Action,
Target = RightNavItems.Target
});
}
else
{
rightNavList.Add(RightNavItems);
}
}

navigationItem.SetRightBarButtonItems(rightNavList.ToArray(), false);

第一次进入页面时,您将项目外观从 title 更改为 icon,但是,当第二次进入页面时,条件 RightNavItems.Title == null 为 true,因此它跳出循环而不向列表添加任何项目,因此 navigationItem.SetRightBarButtonItems 最后添加一个 null 数组。

解决方案

修改如下

if (RightNavItems.Title == null)
{
rightNavList.Add(RightNavItems); //add this line.
continue;
}

关于c# - Xamarin Forms - CustomRenderer 在导航离开后不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55417104/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com