CustomRenderer iOS for button TouchUpInside更改背景

时间:2018-05-08 22:38:59

标签: xamarin xamarin.forms xamarin.ios

我正在尝试为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;
        };


    }
}
然而,它没有工作。我想有必要使用某种事件处理程序才能实现这一点。

1 个答案:

答案 0 :(得分: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);