C# 单触触地内侧不起作用,触地起作用
我在Objective-C中看到了一些关于这个主题的话题。我读了很多,花了两天时间试图找到解决方案,但没有一个对我有用。我主要用C#编写代码。因为我的问题行为(仅在离开/重新进入按钮时触发)和上下文(C#)有点不同。所以,我将尝试我的机会,在这里问我的问题 我会尽量保持简单 下面是一个代码示例:C# 单触触地内侧不起作用,触地起作用,c#,xamarin.ios,uibutton,xamarin,touch-up-inside,C#,Xamarin.ios,Uibutton,Xamarin,Touch Up Inside,我在Objective-C中看到了一些关于这个主题的话题。我读了很多,花了两天时间试图找到解决方案,但没有一个对我有用。我主要用C#编写代码。因为我的问题行为(仅在离开/重新进入按钮时触发)和上下文(C#)有点不同。所以,我将尝试我的机会,在这里问我的问题 我会尽量保持简单 下面是一个代码示例: private UIButton _buttonTest; public override void ViewDidLoad () { base.ViewDidLoad (); _b
private UIButton _buttonTest;
public override void ViewDidLoad ()
{
base.ViewDidLoad ();
_buttonTest = new UIButton(new RectangleF(10, 70, 50, 50));
_buttonTest.SetTitle("0", UIControlState.Normal);
_buttonTest.TouchUpInside += HandleButtonTestTouchUpInside;
_buttonTest.BackgroundColor = UIColor.Red;
this.View.AddSubview(_buttonTest);
}
void HandleButtonTestTouchUpInside (object sender, EventArgs e)
{
string textNumber = _buttonTest.Title(UIControlState.Normal);
// Increment Number
_buttonTest.SetTitle((int.Parse(textNumber)+1).ToString(), UIControlState.Normal);
}
- 有一个按钮,标题文本设置为“0”
- 当用户单击它时,它将数字(标题)增加1
private void SetGrandParentViewGestureEnabled(bool enabled)
{
foreach(UIGestureRecognizer g in this.View.Superview.Superview.GestureRecognizers)
{
g.Enabled = enabled;
}
}
void HandleButtonSubmitTouchDown (object sender, EventArgs e)
{
SetGrandParentViewGestureEnabled(false);
}
void HandleButtonSubmitTouchUpInside (object sender, EventArgs e)
{
// => Do treatments here!
SetGrandParentViewGestureEnabled(true);
}
- 触碰内部不会开火。。。但是,如果我用手指按住按钮,并在离开按钮时一直按住手指,然后重新进入按钮,然后松开按钮,然后。。。。它将在内部触发触地。。。。因此,手指需要离开并重新租用按钮,同时按住按钮,以使触碰内部起火。通常,这段代码工作得很好
- 如果我用触地得分代替触地得分,那么触地得分就起作用了李>
- 对于所有SuperView,“已启用用户交互”设置为True
- 所有视图框架(在超级视图中)似乎都在其超级视图框架内
- 我移动了一下按钮测试,我注意到在视图、超级视图、超级超级视图中,按钮测试触控按钮内部没有正确触发。。。。但它在SuperSuperView中正确启动
有什么建议吗?在SuperSuperView中,我有一个与按钮事件冲突的点击手势
// Tap Gesture
UITapGestureRecognizer tapPageGestureRecognizer = new UITapGestureRecognizer();
tapPageGestureRecognizer.AddTarget(this, new Selector ("HandleTapPageGestureRecognizer:"));
this.View.AddGestureRecognizer(tapPageGestureRecognizer);
其想法是在触发按钮事件、触地时禁用手势SuperSuperView手势。。。并在触发TouchUpInside时重新启用它
因此,这里有一个解决问题的方法:
private void SetGrandParentViewGestureEnabled(bool enabled)
{
foreach(UIGestureRecognizer g in this.View.Superview.Superview.GestureRecognizers)
{
g.Enabled = enabled;
}
}
void HandleButtonSubmitTouchDown (object sender, EventArgs e)
{
SetGrandParentViewGestureEnabled(false);
}
void HandleButtonSubmitTouchUpInside (object sender, EventArgs e)
{
// => Do treatments here!
SetGrandParentViewGestureEnabled(true);
}
但是,我可以使用EventHandler或Action来启用/禁用点击手势
编辑:这是另一个需要添加的功能,以便重新启用手势
void HandleButtonSubmitTouchUpOutside (object sender, EventArgs e)
{
SetGrandParentViewGestureEnabled(true);
}
我有一个类似的问题,我最终使用了一个点击识别器和长按识别器,像这样用于按钮TopRightButton
var longPressGesture = new UILongPressGestureRecognizer(Action);
TopRightButton.AddGestureRecognizer(longPressGesture);
var tapRecognizer = new UITapGestureRecognizer();
tapRecognizer.AddTarget(() =>
{
//method
});
tapRecognizer.NumberOfTapsRequired = 1;
this.TopRightButton.AddGestureRecognizer(tapRecognizer);
private void Action(){ };
你试过Monotouch社区寻求帮助吗?也许你错过了一个技巧,或者只是使用了错误的事件。您使用
toucupinside
这一事实表明事件将在toucupinside
着陆后发生。您是否知道这一点尚不清楚。我使用toucupinside
进行所有按钮点击(因此这是正确的方法),并且没有您提到的问题。在你的按钮上方有其他视图会阻止它被点击吗?我还没有尝试Monotouch社区,但也许我很快就会尝试。我希望我错过了一个技巧,但我认为我使用了正确的项目。是的,我知道触地得分后会出现触地得分事件。我也经常使用触地得分,但这是我第一次遇到这种问题。。。我会检查我的按钮顶部是否有其他视图阻止它被点击……好的,我想我发现了问题。。。按钮和我在SuperSuperView中声明的点击手势之间存在冲突。因此,由于点击手势是在祖父视图上触发的,因此它似乎取消了按钮内部的触碰。我会努力找到一个优雅的解决方案。。。否则。。。我必须在接地时禁用轻触手势。。。然后重新启用触碰内侧的手势。谢谢!我很高兴我偶然发现了这一点。对我来说,它在iOS6中工作,但在ios5中不工作。顺便说一句,lambdas可以使代码更清晰。e、 g.:myButton.TouchDown+=(对象发送者,事件参数e)=>My手势。Enabled=false;