当前位置: 首页 > 知识库问答 >
问题:

Xamarin Forms iOS渲染器-工具栏标准图标

鄢承运
2023-03-14

我可以创建一个简单的选项卡渲染器,它将更新我的表单工具栏项目,以使用内置的iOS图标,如下所示。

导航控制器(NavigationController)仅在视图中不为空,如果我在视图中尝试,它将为空。

问题是,在TabBar项文本被替换为实际图标之前,它会闪烁。

是否应该在其他地方拦截工具栏行为?

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

共有3个答案

公孙胡媚
2023-03-14

请在所需代码块的末尾或执行后尝试以下代码。。。

return base.ViewWillAppear(animated);
司空玮
2023-03-14

是的,您应该覆盖PushViewController并从NavigationRenler方法继承。这是我在应用程序中使用的内容:

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();
    }
}
翟修永
2023-03-14

覆盖OnElementChanged方法

    protected override void OnElementChanged(VisualElementChangedEventArgs e)
    {
        base.OnElementChanged(e);

        if(e.NewElement!= null)
        {
            var list = new List<UIBarButtonItem>();

            // Your code goes here
        }
    }
 类似资料:
  • 我在活动文件中有一个膨胀的视图,布局文件碰巧有一个工具栏小部件,我希望用图标填充。我尝试使用code但是没有显示出来,工具栏文本也没有显示出来。布局的代码是这样的... 如何成功地使此工具栏在一个膨胀的视图中显示图标和文本?

  • Renders中间件是一个Go模板引擎的 Tango 中间件。 安装 go get github.com/tango-contrib/renders 示例 type RenderAction struct { renders.Renderer } func (x *RenderAction) Get() { x.Render("test.html", renders.T{

  • 如何从工具栏中获取图标以更改为使用bbdd中看到的方法获得的新图标。问题是我无法访问更新活动的事件以更改图标。我尝试使用onPreareOptionsMenu方法,但无法使其工作。我无法通过将代码放入onStart来做到这一点,因为它告诉我菜单对象为空或无效。 我的活动由AppCompactActive扩展并通过AdapterView加载。当我返回片段对话框或从下一个活动开始时,我遇到了问题。 谢

  • 我正在尝试新的工具栏组件,但导航图标出现了一些问题。我想实现一个用于反向导航的自定义图标: 在我的清单中,我为我的活动设置了一个父级: 我这样声明工具栏: 然后在“活动”中,我将工具栏配置为: 后退图标不是我用setNavigationIcon()设置的!无论我给这个方法的绘图是什么,导航图标总是后面的箭头。 我试图删除清单中的父关联,但唯一的效果是(显然)阻止按钮返回。 相反,如果我想要默认的后

  • 我有一个工具栏。这张照片的背景颜色是明亮的橙色,最好看的颜色是白色而不是黑色。 我的默认颜色是黑色而不是白色。因为它会与其他东西冲突,所以几乎不可能被覆盖。我无法将主文本颜色更改为白色! 我设法改变了标题的颜色。我现在正在寻找的是如何将操作按钮的颜色也更改为白色。 我的代码: 主要活动: 菜单栏: 风格:

  • 你知道我如何在Android/支持库中找到原来的汉堡包图标吗?(或如何显示) 在我的活动中 布局文件 styles.xml