Xamarin iOS在刷过背景色后会更改背景色
我有一个带有按钮的网格,如果用户在上面滑动,我会改变背景颜色。 我创建了一个自定义按钮类:Xamarin iOS在刷过背景色后会更改背景色,xamarin,xamarin.ios,custom-renderer,Xamarin,Xamarin.ios,Custom Renderer,我有一个带有按钮的网格,如果用户在上面滑动,我会改变背景颜色。 我创建了一个自定义按钮类: public class TouchscreenTestButton : UIButton { public override void TouchesBegan(NSSet touches, UIEvent evt) { base.TouchesBegan(touches, evt); this.BackgroundColor = UIColor.
public class TouchscreenTestButton : UIButton
{
public override void TouchesBegan(NSSet touches, UIEvent evt)
{
base.TouchesBegan(touches, evt);
this.BackgroundColor = UIColor.Green;
}
public override void TouchesMoved(NSSet touches, UIEvent evt)
{
base.TouchesMoved(touches, evt);
UITouch touch = touches.AnyObject as UITouch;
if (touch != null)
{
this.BackgroundColor = UIColor.Green;
SetNeedsDisplay();
}
}
public override void TouchesEnded(NSSet touches, UIEvent evt)
{
base.TouchesEnded(touches, evt);
UITouch touch = touches.AnyObject as UITouch;
if (touch != null)
{
this.BackgroundColor = UIColor.Green;
}
}
}
还有一个按钮渲染器,用于将iOS的普通UIButtons替换为my TouchScreen TestButton
public class TouchscreenTestButtonRenderer : ButtonRenderer
{
protected override void OnElementChanged(ElementChangedEventArgs<Button> e)
{
int columnIndex = Grid.GetColumn(e.NewElement);
int rowIndex = Grid.GetRow(e.NewElement);
TouchscreenTestButton button = new TouchscreenTestButton();
button.TouchDown +=(sender, evt) => Control.BackgroundColor=UIColor.Green;
base.SetNativeControl(button);
base.OnElementChanged(e);
}
}
公共类触摸屏TestButtonRenderer:ButtonRenderer
{
受保护的覆盖无效OnElementChanged(ElementChangedEventArgs e)
{
int columnIndex=Grid.GetColumn(e.NewElement);
int rowIndex=Grid.GetRow(e.NewElement);
TouchscreenTestButton按钮=新的TouchscreenTestButton();
button.tounddown+=(发送方,evt)=>Control.BackgroundColor=UIColor.Green;
base.SetNativeControl(按钮);
基础。一个要素发生变化(e);
}
}
这不起作用,只有我触摸的第一个按钮会得到绿色背景色。之后,我为网格创建渲染器:
public class GridRenderer : ViewRenderer
{
public override void TouchesMoved(NSSet touches, UIEvent evt)
{
base.TouchesMoved(touches, evt);
var touch = touches.AnyObject as UITouch;
for (int i = 0; i < touch.View.Subviews.Length; i++)
{
var test = touch.LocationInView(this);
if (PointInside(touch.LocationInView(this), evt))
{
this.Subviews[i].TouchesBegan(touches, evt);
this.Subviews[i].BackgroundColor = UIColor.Green;
SetNeedsDisplay();
}
}
}
}
公共类GridRenderer:ViewRenderer
{
公共覆盖无效触摸移动(NSSet触摸,UIEVT事件)
{
基础。触摸移动(触摸,evt);
var touch=touch.AnyObject作为UITouch;
对于(int i=0;i能请人帮忙吗?非常感谢 我用下面的代码进行了测试,它可以正常工作
[assembly: ExportRenderer(typeof(Grid), typeof(GridRenderer))]
namespace Slide.iOS
{
class GridRenderer :ViewRenderer
{
public override void TouchesBegan(NSSet touches, UIEvent evt)
{
base.TouchesBegan(touches, evt);
var touch = touches.AnyObject as UITouch;
for (int i = 0; i < touch.View.Subviews.Length; i++)
{
var test = touch.LocationInView(this);
var buttonView = touch.View.Subviews[i];
CGRect frame = buttonView.Frame;
if (frame.Contains(test))
{
//pay attention
var button = buttonView.Subviews[0];
button.BackgroundColor = UIColor.Green;
}
}
}
public override void TouchesMoved(NSSet touches, UIEvent evt)
{
base.TouchesMoved(touches, evt);
var touch = touches.AnyObject as UITouch;
for (int i = 0; i < touch.View.Subviews.Length; i++)
{
var test = touch.LocationInView(this);
var buttonView = touch.View.Subviews[i];
CGRect frame = buttonView.Frame;
if (frame.Contains(test)) {
//pay attention
var button = buttonView.Subviews[0];
button.BackgroundColor = UIColor.Green;
}
}
}
}
三,。查看按钮查看,注意不是按钮!!我在开始时设置了背景色,但没有效果。当我们在网格中布局控件时,它将根据其列和行自动生成子视图,然后将控件放置在子视图上
e、 g
上面的网格将有4个子视图,子视图上有四个相应的按钮。我用下面的代码进行了测试,它可以工作
[assembly: ExportRenderer(typeof(Grid), typeof(GridRenderer))]
namespace Slide.iOS
{
class GridRenderer :ViewRenderer
{
public override void TouchesBegan(NSSet touches, UIEvent evt)
{
base.TouchesBegan(touches, evt);
var touch = touches.AnyObject as UITouch;
for (int i = 0; i < touch.View.Subviews.Length; i++)
{
var test = touch.LocationInView(this);
var buttonView = touch.View.Subviews[i];
CGRect frame = buttonView.Frame;
if (frame.Contains(test))
{
//pay attention
var button = buttonView.Subviews[0];
button.BackgroundColor = UIColor.Green;
}
}
}
public override void TouchesMoved(NSSet touches, UIEvent evt)
{
base.TouchesMoved(touches, evt);
var touch = touches.AnyObject as UITouch;
for (int i = 0; i < touch.View.Subviews.Length; i++)
{
var test = touch.LocationInView(this);
var buttonView = touch.View.Subviews[i];
CGRect frame = buttonView.Frame;
if (frame.Contains(test)) {
//pay attention
var button = buttonView.Subviews[0];
button.BackgroundColor = UIColor.Green;
}
}
}
}
三,。查看按钮查看,注意不是按钮!!我在开始时设置了背景色,但没有效果。当我们在网格中布局控件时,它将根据其列和行自动生成子视图,然后将控件放置在子视图上
e、 g
上面的网格将有4个子视图,以及该子视图上的四个相应按钮。只是为了确保我理解:您想要更改按钮(Xamarin.Forms)的背景色对于iOS应用程序,当用户在按钮上滑动时?是的,我创建了一个带有按钮的网格,用户可以在其上滑动,并且用户触摸的每个按钮都应具有绿色背景色。我不确定按钮是否是它的最佳控件。只是为了确保我理解:您想要更改按钮的背景色(Xamarin.Forms)对于iOS应用程序,当用户在按钮上滑动时?是的,我创建了一个带有按钮的网格,用户可以在其上滑动,并且用户触摸的每个按钮都应具有绿色背景色。我不确定按钮是否是它的最佳控件。一个小问题,在touchesbeated中,您可能打算调用base.touchesbeated而不是base.TouchesMoved一个小问题,在touchesbeated中,您可能打算调用base.touchesbeated而不是base.TouchesMoved
if (frame.Contains(test))
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>