diff options
-rw-r--r-- | Xamarin.Forms.Platform.iOS/Renderers/TabbedRenderer.cs | 47 |
1 files changed, 24 insertions, 23 deletions
diff --git a/Xamarin.Forms.Platform.iOS/Renderers/TabbedRenderer.cs b/Xamarin.Forms.Platform.iOS/Renderers/TabbedRenderer.cs index 25527dfb..c6c07370 100644 --- a/Xamarin.Forms.Platform.iOS/Renderers/TabbedRenderer.cs +++ b/Xamarin.Forms.Platform.iOS/Renderers/TabbedRenderer.cs @@ -193,22 +193,12 @@ namespace Xamarin.Forms.Platform.iOS { var page = (Page)sender; - var renderer = Platform.GetRenderer(page); - if (renderer == null) - return; + IVisualElementRenderer renderer = Platform.GetRenderer(page); - if (renderer.ViewController.TabBarItem == null) + if (renderer?.ViewController.TabBarItem == null) return; - UIImage image = null; - if (!string.IsNullOrEmpty(page.Icon)) - image = new UIImage(page.Icon); - - // the new UITabBarItem forces redraw, setting the UITabBarItem.Image does not - renderer.ViewController.TabBarItem = new UITabBarItem(page.Title, image, 0); - - if (image != null) - image.Dispose(); + SetTabBarItem(renderer); } } @@ -292,7 +282,7 @@ namespace Xamarin.Forms.Platform.iOS void SetupPage(Page page, int index) { - var renderer = Platform.GetRenderer(page); + IVisualElementRenderer renderer = Platform.GetRenderer(page); if (renderer == null) { renderer = Platform.CreateRenderer(page); @@ -301,15 +291,7 @@ namespace Xamarin.Forms.Platform.iOS page.PropertyChanged += OnPagePropertyChanged; - UIImage icon = null; - if (page.Icon != null) - icon = new UIImage(page.Icon); - - renderer.ViewController.TabBarItem = new UITabBarItem(page.Title, icon, 0); - if (icon != null) - icon.Dispose(); - - renderer.ViewController.TabBarItem.Tag = index; + SetTabBarItem(renderer); } void TeardownPage(Page page, int index) @@ -418,5 +400,24 @@ namespace Xamarin.Forms.Platform.iOS if (platformEffect != null) platformEffect.Container = View; } + + void SetTabBarItem(IVisualElementRenderer renderer) + { + var page = renderer.Element as Page; + if(page == null) + throw new InvalidCastException($"{nameof(renderer)} must be a {nameof(Page)} renderer."); + + UIImage icon = null; + if (!string.IsNullOrEmpty(page.Icon)) + icon = new UIImage(page.Icon); + + renderer.ViewController.TabBarItem = new UITabBarItem(page.Title, icon, 0) + { + Tag = Tabbed.Children.IndexOf(page), + AccessibilityIdentifier = page.AutomationId + }; + + icon?.Dispose(); + } } }
\ No newline at end of file |