如何在Xamarin.Forms iOS自定义渲染器中将Apple系统图标用作选项卡图标?

时间:2017-08-01 16:03:44

标签: xamarin xamarin.forms

我看到了这个指南:

https://developer.apple.com/ios/human-interface-guidelines/graphics/system-icons/

我想使用其中一些图标。有没有办法做到这一点,还是我必须搜索我自己的类似图标png并使用它们?

请注意,我可以使用自定义渲染器,如果这是我应该这样做的方式。我是Xamarin的新手,非常感谢有关如何做到这一点的任何建议。

以下是我的自定义渲染器的示例。但我仍然不明白如何使用系统图标:

FMDatabaseQueue

以下是我分配图标的方法。如果可能的话,我也想在自定义渲染器中执行此操作:

    private void OnTabBarReselected(object sender, UITabBarSelectionEventArgs e)
    {
        //PhrasesFrameRendererClass frame = new PhrasesFrameRendererClass();
        var tabs = Element as TabbedPage;
        var playTab = tabs.Children[0];
        if (TabBar.SelectedItem.Title == "Play")
        {
            if (tabs != null)
            {
                playTab.Title = "Pause";
                playTab.Icon = "pause.png";
                playTab.Icon =  UITabBarSystemItem.Featured;
            }
            AS.runCardTimer = true;
        }
        else if (TabBar.SelectedItem.Title == "Pause")
        {
            if (tabs != null)
            {
                playTab.Title = "Play";
                playTab.Icon = "play.png";
                AS.phrasesFrame.SetTimerLabel("paused");
            }
            AS.runCardTimer = false;
        }

    }

1 个答案:

答案 0 :(得分:1)

您的页面需要自定义渲染器。在我的示例中,它是CustomTabsPage类。您不能只使用系统图标来创建UIImage。我们需要使用UITabBarItem。问题是UITabBarItem不允许既不改变标题也不改变图像/图标。但我们可以从中复制图像。

using ButtonRendererDemo;
using ButtonRendererDemo.iOS;
using Xamarin.Forms;
using Xamarin.Forms.Platform.iOS;

[assembly: ExportRenderer(typeof(CustomTabsPage), typeof(CustomTabsPageRenderer))]
namespace ButtonRendererDemo.iOS
{
    public class CustomTabsPageRenderer : TabbedRenderer
    {

         #region Sytem Image with custom title

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

            foreach (var item in TabBar.Items)
            {
                item.Image = GetTabIcon(item.Title);
            }
        }

        private UIImage GetTabIcon(string title)
        {
            UITabBarItem item = null;

            switch (title)
            {
                case "Profile":
                    item = new UITabBarItem(UITabBarSystemItem.Search, 0);
                    break;
                case "Settings":
                    item = new UITabBarItem(UITabBarSystemItem.Bookmarks, 0);
                    break;
            }

            var img = (item != null) ? UIImage.FromImage(item.SelectedImage.CGImage, item.SelectedImage.CurrentScale, item.SelectedImage.Orientation) : new UIImage();
            return img;
        }

        #endregion
    }
}

enter image description here