【问题标题】:CustomRenderer iOS for button TouchUpInside change backgroundCustomRenderer iOS for button TouchUpInside 改变背景
【发布时间】:2018-10-18 23:17:16
【问题描述】:

我正在尝试为 iOS 编写一个 CustomRenderer,当用户触摸它时,我想通过它更改按钮的 BackgroundColor。到目前为止,我得到了这个:

public class BtnRendereriOS : ButtonRenderer
{

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


        if (Control != null)
        {
            Control.BackgroundColor = UIColor.FromRGB(3, 169, 244);
            Control.Layer.CornerRadius = 0;

        }
        Control.TouchUpInside += (sender, UIButton) => {
            Control.BackgroundColor = UIColor.Brown;
        };


    }
}

但它不起作用。我想需要某种事件处理程序才能使这成为可能。

【问题讨论】:

    标签: xamarin xamarin.forms xamarin.ios


    【解决方案1】:

    需要初始设置背景颜色(如果不是默认颜色),然后您需要在TouchUpInsideTouchUpOutside 上将其设置回相同的颜色。在TouchDown 上,将其设置为您希望按下按钮时的颜色。

    切换背景颜色:

    if (Control != null)
    {
        void BackgroundNormalState(object sender)
        {
            (sender as UIButton).BackgroundColor = UIColor.Green;
        }
        BackgroundNormalState(Control);
        Control.TouchUpInside += (object sender, EventArgs e) =>
        {
            BackgroundNormalState(sender);
        };
        Control.TouchUpOutside += (object sender, EventArgs e) =>
        {
            BackgroundNormalState(sender);
        };
        Control.TouchDown += (object sender, EventArgs e) =>
        {
            (sender as UIButton).BackgroundColor = UIColor.Red;
        };
    }
    

    更新:

    我也可以通过这个方法组更改我的文本颜色吗?

    有一个SetTitleColor,您可以在其中为不同的UIControlState 值分配不同的颜色,NormalHighlighted 是开始的:

    Control.SetTitleColor(UIColor.Red, UIControlState.Normal);
    Control.SetTitleColor(UIColor.Green, UIControlState.Highlighted);
    

    【讨论】:

    • 谢谢!我也可以通过这个方法组更改我的文本颜色吗?
    • 非常感谢您抽出宝贵的时间@SushiHangover!它可以工作,但是,按钮顶部有一个过渡元素,这意味着背景会立即改变颜色,而文本具有不透明度过渡。
    • @JeppeChristensen 如果不需要“动画”,您可以使用UIView.PerformWithoutAnimation 设置SetTitleColorBackgroundColor(在TouchDown/TouchUp 中执行此操作),或者如果您正在尝试匹配动画UIView.Animate|UIView.AnimateAsync 并更改该方法的Action 中的BackgroundColor 和TitleColor,以便颜色过渡在同一时间段内从|到动画。有关更多信息,请参阅 Core Animation 文档。
    • @JeppeChristensen 没问题,如果您对此感到困惑,请提出一个新问题.. ;-)
    猜你喜欢
    • 2013-12-24
    • 2021-04-08
    • 2020-04-22
    • 2017-04-25
    • 1970-01-01
    • 2021-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多