繁体   English   中英

Monotouch TouchUpInside不起作用,TouchDown可以使用

[英]Monotouch TouchUpInside does not work, TouchDown works

我在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会起作用。
  • 对于所有超级视图,“User Interaction Enabled”设置为True。
  • 所有视图框架(在超视图中)似乎都在其超视图框架内。
  • 我移动了_buttonTest,我注意到_buttonTest TouchUpInside在View,SuperView,SuperSuperView中没有正确触发....但它在SuperSuperSuperView中正确触发。

有什么建议吗?

在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);
}

我有一个类似的问题,我最终使用了一个水龙头识别器和这样的长按识别器,用于按钮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(){  };

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM