【发布时间】:2019-03-29 12:06:03
【问题描述】:
我的主页面的 iOS 本机代码中有一个自定义渲染器。当应用程序启动时它工作得非常好,并使用我想要的 iOS 系统图标呈现导航栏项目。但是,如果我离开主页导航,当我返回 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);
}
}
【问题讨论】:
-
当您说“自定义渲染器”时,这是视图的实际表单渲染器吗? IE。您正在显示视图控制器的
ViewWillAppear.... -
@SushiHangover 它是 PageRenderer 类的扩展。我已经编辑以包含完整的课程。
-
你能提供一个样品,以便我可以测试它吗?
-
@LucasZhang-MSFT 我使用 Xamarin 模板创建了一个示例,该模板表现出相同的行为:icloud.com/iclouddrive/0DfTqRedqa_RytZ_VL-n5rFUQ#Example
-
好的,我会检查的
标签: c# ios xamarin xamarin.forms xamarin.ios