我在Objective-C中看到了关于这个主题的一些主题。我读了很多,花了两天时间试图找到解决方案,但没有一个能为我工作。我主要用C#编码。由于我的问题行为(仅在离开/重新输入按钮时触发)和上下文(C#)有点不同。所以,我会在这里问我的问题,试试我的机会。
我会尽量保持简单。
以下是代码示例:
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 :(得分:2)
在SuperSuperView中,我有一个与Button事件冲突的点击手势。
// Tap Gesture
UITapGestureRecognizer tapPageGestureRecognizer = new UITapGestureRecognizer();
tapPageGestureRecognizer.AddTarget(this, new Selector ("HandleTapPageGestureRecognizer:"));
this.View.AddGestureRecognizer(tapPageGestureRecognizer);
想法是在触发按钮事件TouchDown时禁用手势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);
}
答案 1 :(得分:0)
我遇到了类似的问题,我最终使用了一个水龙头识别器以及这样的长按识别器,用于按钮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(){ };