Я пытаюсь написать CustomRenderer для iOS, с помощью которого я хочу изменить 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;
};
}
}
Однако это не работает. Я предполагаю, что для этого должен быть какой-то обработчик событий.





Цвет фона должен быть изначально установлен (если не цвет по умолчанию), затем вам нужно вернуть тот же цвет на TouchUpInside и TouchUpOutside. На 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;
};
}
Can i change my textcolor through this methodgroup as well?
Есть SetTitleColor, где вы можете назначить разные цвета для разных значений UIControlState, Normal и Highlighted - это те, с которых нужно начинать:
Control.SetTitleColor(UIColor.Red, UIControlState.Normal);
Control.SetTitleColor(UIColor.Green, UIControlState.Highlighted);
Большое спасибо за уделенное время @SushiHangover! Это работает, однако есть элемент перехода поверх кнопки, что означает, что фон мгновенно меняет цвет, в то время как текст имеет переход непрозрачности.
@JeppeChristensen Если «анимация» не нужна, вы можете использовать UIView.PerformWithoutAnimation для установки SetTitleColor и BackgroundColor (сделайте это в TouchDown / TouchUp), или если вы пытаетесь сопоставить анимацию UIView.Animate|UIView.AnimateAsync и изменить BackgroundColor и TitleColor в действии этого метода, поэтому переход цвета анимируется от | до в течение того же периода времени. Обратитесь к документации Core Animation для получения дополнительной информации об этом.
@JeppeChristensen, без проблем, если вы застряли на этом, просто задайте новый вопрос .. ;-)
Спасибо! Могу ли я изменить цвет текста с помощью этой группы методов?