dewango / BottomNavigationBarXF

Bottom Navigation Bar for Xamarin Forms
MIT License
187 stars 97 forks source link

BottomBarPageExtensions.SetBadgeCount doesn't work on iOS #87

Open mosflex opened 6 years ago

mosflex commented 6 years ago

BottomBarPageExtensions.SetBadgeCount work on Android but not iOS. I forgot something ?

tahirmehraj commented 6 years ago

Do you found any Solution for this as I am stuck with the same!

shivanimangla13 commented 6 years ago

Add custom renderer for iOS. It worked for me :) .

"using System; using BottomBar.XamarinForms; using Xamarin.Forms; using Xamarin.Forms.Platform.iOS; using SchoolApp.iOS; using System.ComponentModel;

[assembly: ExportRenderer(typeof(BottomBarPage), typeof(BottomBarPageRenderer))] namespace SchoolApp.iOS { class BottomBarPageRenderer : TabbedRenderer {

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

    if (e.NewElement != null)
    {
        BottomBarPage bottomBarPage = e.NewElement as BottomBarPage;
        AddPropertyChangedHandlersForPages();
    }
}

void AddPropertyChangedHandlersForPages()
{
    BottomBarPage bottomBarPage = Element as BottomBarPage;
    foreach (var page in bottomBarPage.Children)
    {
        page.PropertyChanged += OnPagePropertyChanged;
        UpdateTabBadge(page);
    }
}
public override void ViewWillAppear(bool animated)
{
    base.ViewWillAppear(animated);

    BottomBarPage bottomBarPage = Element as BottomBarPage;
    foreach (var page in bottomBarPage.Children)
    {
        UpdateTabBadge(page);
    }
}

void OnPagePropertyChanged(object sender, PropertyChangedEventArgs e)
{
    if (e.PropertyName == BottomBarPageExtensions.BadgeCountProperty.PropertyName)
    {
        UpdateTabBadge((Page)sender);
    }
}
private void UpdateTabBadge(Page page)
{
    if (TabBar != null && TabBar.Items != null)
    {
        var badgeCount = BottomBarPageExtensions.GetBadgeCount(page);
        var tabIndex = Tabbed.Children.IndexOf(page);
        TabBar.Items[tabIndex].BadgeValue = (badgeCount == 0 ? null : badgeCount.ToString());
    }
}

} } "

screen shot 2018-07-03 at 3 34 54 pm