Я создаю приложение, в котором мне нужно реализовать счетчик значков над значком в ToolbarItem
.Я создаю службу зависимости для IOS и Android.Я ссылаюсь на этот URL .
После реализации этого я получаю идеальный результат в Android, но когда я пытаюсь запустить его на устройстве IOS, я не могу его использовать.При этом
var rightButtonItems = vc?.ParentViewController?.NavigationItem?.RightBarButtonItems;
всегда возвращает ноль, поэтому я не могу использовать и устанавливать счетчик значков над приложением.
Я использую стандартную библиотеку классов .Net.У меня та же проблема, что и здесь .
Мой код:
Badge.xaml
<ContentPage.ToolbarItems>
<ToolbarItem Icon="notification" Name="MenuItem1" Order="Primary" Priority="0" Text="Notification" Clicked="ToolbarItem_Clicked"/>
</ContentPage.ToolbarItems>
Badge.xaml.cs
private void ToolbarItem_Clicked(object sender, EventArgs e)
{
Navigation.PushAsync(new Notification());
}
private void ContentPage_Appearing(object sender, EventArgs e)
{
base.OnAppearing();
ViewModel.AppearingCommand?.Execute(null);
if (ToolbarItems.Count > 0)
DependencyService.Get<IToolbarItemBadgeService>().SetBadge(this, ToolbarItems.First(), "4", Color.Red, Color.White);
}
IToolbarItemBadgeService.cs (в общем проекте)
public interface IToolbarItemBadgeService
{
void SetBadge(Page page, ToolbarItem item, string value, Color backgroundColor, Color textColor);
}
ToolbarItemBadgeService.cs (в проекте iOS)
[assembly: Dependency(typeof(ToolbarItemBadgeService))]
namespace CustomerServiceApp.iOS
{
public class ToolbarItemBadgeService : IToolbarItemBadgeService
{
public void SetBadge(Page page, ToolbarItem item, string value, Color backgroundColor, Color textColor)
{
Device.BeginInvokeOnMainThread(() =>
{
var renderer = Platform.GetRenderer(page);
if (renderer == null)
{
renderer = Platform.CreateRenderer(page);
Platform.SetRenderer(page, renderer);
}
var vc = renderer.ViewController;
var rightButtonItems = vc?.ParentViewController?.NavigationItem?.RightBarButtonItems;//Here i get null in rightButtonItems
// If we can't find the button where it typically is check the child view controllers
// as this is where MasterDetailPages are kept
if (rightButtonItems == null && vc.ChildViewControllerForHomeIndicatorAutoHidden != null)//vc.ChildViewControllerForHomeIndicatorAutoHidden is also return null
foreach (var uiObject in vc.ChildViewControllerForHomeIndicatorAutoHidden)
{
string uiObjectType = uiObject.GetType().ToString();
if (uiObjectType.Contains("FormsNav"))
{
UIKit.UINavigationBar navobj = (UIKit.UINavigationBar)uiObject;
if (navobj.Items != null)
foreach (UIKit.UINavigationItem navitem in navobj.Items)
{
if (navitem.RightBarButtonItems != null)
{
rightButtonItems = navitem.RightBarButtonItems;
break;
}
}
}
}
var idx = page.ToolbarItems.IndexOf(item);
if (rightButtonItems != null && rightButtonItems.Length > idx)
{
var barItem = rightButtonItems[idx];
if (barItem != null)
{
barItem.UpdateBadge(value, backgroundColor.ToUIColor(), textColor.ToUIColor());
}
}
});
}
}
}
Кто-нибудь может посмотреть на это и предложить мне, что я должен сделать в этом?