gpt4 book ai didi

xamarin - Xamarin iOS 渲染器中使用的 "if (Control == null)"部分是什么?

转载 作者:行者123 更新时间:2023-12-01 03:08:11 25 4
gpt4 key购买 nike

查看 Xamarin 的示例片段,我看到他们建议创建一个包含三个部分的自定义渲染器:

  • if (Control == null)
  • if (e.OldElement != null)
  • if (e.NewElement != null)

  • 我的渲染器看起来像这样。但是,我不明白我会用什么 if (Control == null)节为。

    问题 1) 谁能给我关于如何使用它的建议,以及我的实现是否有任何问题?

    问题 2) 我是否正确实现了这一点,我应该如何/在哪里删除 OnTabbarControllerItemSelected处理程序?

    问题 3) Control 元素从何而来?那会是我调用的同一个变量 _page或元素 e ?
    tabbarController.ViewControllerSelected += OnTabbarControllerItemSelected;

    public class TabbedPageRenderer : TabbedRenderer
    {
    private MainPage _page;

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

    //if (Control == null)
    //{
    // // Instantiate the native control
    //}

    if (e.OldElement != null)
    {
    // Unsubscribe from event handlers and cleanup any resources
    e.OldElement.PropertyChanged -= Current_PropertyChanged;
    return;
    }

    if (e.NewElement != null)
    {
    // Configure the control and subscribe to event handlers
    TabBar.Translucent = false;
    TabBar.BackgroundImage = new UIImage();
    _page = (MainPage)e.NewElement;
    e.NewElement.PropertyChanged += Current_PropertyChanged;
    }

    try
    {
    var tabbarController = (UITabBarController)this.ViewController;
    if (tabbarController != null)
    {
    tabbarController.ViewControllerSelected += OnTabbarControllerItemSelected;
    UpdateTheme();
    }
    }
    catch (Exception exception)
    {
    Console.WriteLine(exception);
    }
    }

    private void OnTabbarControllerItemSelected(object sender, UITabBarSelectionEventArgs eventArgs)
    {
    if (!(_page.CurrentPage is Japanese.CardsTabPage) && App.quizRunning == true)
    _page.CurrentPage = App.navCardsTabPage;
    }

    void Current_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
    {
    if (e.PropertyName == "Theme")
    UpdateTheme();
    }

    void UpdateTheme()
    {
    switch (_page.Theme)
    {
    default:
    case TH.Light:
    TabBar.SelectedImageTintColor = UIColor.Red;
    break;
    case TH.Dark:
    TabBar.SelectedImageTintColor = UIColor.Red;
    break;
    }
    }

    }

    最佳答案

    Question 1 & 3



    该代码段用于编写自定义渲染器, Control属性(property)在 ViewRenderer类(class)。由于您的控件继承自 TabbedRenderer ,没有必要遵循代码段。

    Question 2



    ViewController属性返回 TabbedRenderer本身,所以你不需要每次都添加监听器 OnElementChanged调用。考虑将其移至构造函数。

    像这样:

    public class TabbedPageRenderer : TabbedRenderer
    {
    private MainPage _page;

    public TabbedPageRenderer()
    {
    this.ViewControllerSelected += OnTabbarControllerItemSelected;
    }

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

    if (e.OldElement != null)
    {
    // Unsubscribe from event handlers and cleanup any resources
    e.OldElement.PropertyChanged -= Current_PropertyChanged;
    return;
    }

    if (e.NewElement != null)
    {
    // Configure the control and subscribe to event handlers
    TabBar.Translucent = false;
    TabBar.BackgroundImage = new UIImage();
    _page = (MainPage)e.NewElement;
    e.NewElement.PropertyChanged += Current_PropertyChanged;
    }

    if(_page != null)
    UpdateTheme();
    }

    private void OnTabbarControllerItemSelected(object sender, UITabBarSelectionEventArgs eventArgs)
    {
    if (_page != null && !(_page.CurrentPage is Japanese.CardsTabPage) && App.quizRunning == true)
    _page.CurrentPage = App.navCardsTabPage;
    }

    void Current_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
    {
    if (e.PropertyName == "Theme")
    UpdateTheme();
    }

    void UpdateTheme()
    {
    switch (_page.Theme)
    {
    default:
    case TH.Light:
    TabBar.SelectedImageTintColor = UIColor.Red;
    break;
    case TH.Dark:
    TabBar.SelectedImageTintColor = UIColor.Red;
    break;
    }
    }
    }

    关于xamarin - Xamarin iOS 渲染器中使用的 "if (Control == null)"部分是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54587220/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com