在IOS Xamarin Forms中更改切换颜色

问题描述 投票:1回答:2

切换IOS Xamarin Forms时如何更改切换按钮的颜色?自定义渲染将只设置一次颜色:

Xamarin forms toggle button default color on IOS

切换开关时不会更改。同样如果在AppDelegate.cs中设置值,它只会执行一次。我需要这个:

enter image description hereenter image description here

在IOS中唯一可能的用途:

UISwitch.Appearance.ThumbTintColor = UIColor.Brown;
UISwitch.Appearance.OnTintColor = UIColor.Red;

但如果我的开关在PCL项目中,我如何访问该字段,并用于Xamarin Forms。

ios xamarin.forms
2个回答
1
投票

您仍然可以在自定义渲染器中执行此操作。只需听一下开关的ValueChanged事件,就可以检查它是打开还是关闭,并更新颜色。

例如,在iOS项目的自定义切换渲染器类中:

protected override void OnElementChanged(ElementChangedEventArgs<Switch> e)
{
    base.OnElementChanged(e);

    Control.ValueChanged += Control_ValueChanged;
}

private void Control_ValueChanged(object sender, EventArgs e)
{
    if (Control.On)
    {
        // set on colors
    }
    else
    {
        // set off colors
    }
}

1
投票

我解决了这个问题:

public class CustomSwitchRenderer: SwitchRenderer
{       
    protected override void OnElementChanged(ElementChangedEventArgs<Switch> e)
    {
        Element.Toggled += ElementToggled;

        base.OnElementChanged(e);

        if (Control != null)
        {                
            UpdateUiSwitchColor();
        }
    }

    private void ElementToggled(object sender, ToggledEventArgs e)
    {
        UpdateUiSwitchColor();
    }

    private void UpdateUiSwitchColor()
    {
        var temp = Element as Switch;

        if (temp.IsToggled)
        {
            Control.ThumbTintColor = Color.FromHex(ColorConstants.BlueHex).ToUIColor();
            Control.OnTintColor = Color.FromHex(ColorConstants.OblueLightHex).ToUIColor();
        }
        else
        {
            Control.ThumbTintColor =  Color.FromHex(ColorConstants.GrayHex).ToUIColor();
        }
    }
}

所以,每当执行Toggle时我都会激活事件:

Element.Toggled += ElementToggled;
© www.soinside.com 2019 - 2024. All rights reserved.