【问题标题】:Change Switch color in IOS Xamarin Forms更改 IOS Xamarin 表单中的开关颜色
【发布时间】:2023-03-15 15:17:01
【问题描述】:

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

Xamarin forms toggle button default color on IOS

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

在 IOS 中只能使用:

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

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

【问题讨论】:

    标签: ios xamarin.forms


    【解决方案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;
    

    【讨论】:

      【解决方案2】:

      您仍然可以在自定义渲染器中执行此操作。只需监听开关的 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
          }
      }
      

      【讨论】:

      • 嗨@sme,感谢您的回答,我发布了我是如何解决问题的,我不确定哪种方法更好
      猜你喜欢
      • 2022-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-14
      • 1970-01-01
      • 2023-01-12
      相关资源
      最近更新 更多