RUDE

Как создать несколько пользовательских рендереров одного типа?

Я хотел создать рендеринг страницы с типом ContentPage. Я создал это в Android, и он работает, но в IOS есть пользовательский рендеринг страниц того же типа (ContentPage). Его можно удалить, так как он был из пакета nuget и работал в другом контексте.

Вот мой код

[assembly: ExportRenderer(typeof(ContentPage), typeof(CustomPageRenderer))]
namespace AlwinInvoiceGenerator.IOS
{
   using CoreGraphics;
   using UIKit;
   using Xamarin.Forms;
   using Xamarin.Forms.Platform.iOS;

public class CustomPageRenderer : PageRenderer
{
    public override void ViewWillAppear(bool animated)
    {
        base.ViewWillAppear(animated);
        if (Element == null || !(Element is ContentPage basePage) || basePage.BindingContext == null ||
            !(basePage.BindingContext is BaseViewModel baseViewModel))
        {
            return;
        }

        SetCustomBackButton(baseViewModel);
    }

    protected override void OnElementChanged(VisualElementChangedEventArgs e)
    {
        base.OnElementChanged(e);
        OverrideUserInterfaceStyle = UIUserInterfaceStyle.Light;
    }

    private void SetCustomBackButton(BaseViewModel baseViewModel)
    {
        var fakeButton = new UIButton {Frame = new CGRect(0, 0, 50, 40), BackgroundColor = UIColor.Clear};
        fakeButton.TouchDown += (sender, e) =>
        {
            baseViewModel.OnBackButtonClicked();
        };

        NavigationController?.NavigationBar.AddSubview(fakeButton);
    }
}

Вроде не регистрируется и поэтому не звонит. У меня есть другой рендерер страниц, зарегистрированный в сборке.

[assembly: ExportRenderer(typeof(ContentPage), typeof(IOSToolbarExtensions.iOS.Renderers.IOSToolbarExtensionsContentPageRenderer), Priority = short.MaxValue)]

Если я удалю эту строку, то приведенный выше код будет работать, но не два одновременно. Пожалуйста помоги


32
1

Ответ:

Решено

Один и тот же тип не работает для нескольких средств визуализации. Я создал подтип своего собственного рендерера и переопределил необходимые методы. Он работает хорошо