单点触摸TouchUpInside不起作用,TouchDown起作用



我在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"
  • 当用户点击它时,它会将数字(标题)增加1

这个代码通常工作得很好!

然而,由于一些未知的原因,它在我的一些课程中不起作用。。。

问题是:

  • TouchUpInside不点火。。。然而,如果我用手指按住按钮,在离开按钮的同时保持手指,然后重新输入按钮,然后松开按钮,那么。。。。它将触发TouchUpInside。。。。因此手指需要离开并重新租用按钮,同时按住按钮以使TouchUpInside启动。通常,此代码工作得非常好

检查内容:

  • 如果我用TouchDown替换TouchUpInside,那么TouchDown就起作用了
  • 对于所有超级视图,"已启用用户交互"设置为True
  • 所有视图框架(在超视图中)似乎都在其超视图框架内
  • 我移动了_buttonTest,注意到_buttonTestTouchUpInside在View、SuperView、SuperSuperView中没有正确启动。。。。但它在SuperSuperSuperView中正确启动

有什么建议吗?

在SuperSuperView中,我的点击手势与Button事件发生冲突。

    // Tap Gesture
    UITapGestureRecognizer tapPageGestureRecognizer = new UITapGestureRecognizer();
    tapPageGestureRecognizer.AddTarget(this, new Selector ("HandleTapPageGestureRecognizer:"));         
    this.View.AddGestureRecognizer(tapPageGestureRecognizer);

这个想法是在按钮事件TouchDown被触发时禁用手势SuperView手势。。。并在触发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(){  };

最新更新