我在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。通常,此代码效果很好。


检查的事情:


如果我将TouchUpInside替换为TouchDown,则TouchDown可以工作。
所有超级视图的“启用用户互动”均设置为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);
}

关于c# - Monotouch TouchUpInside不起作用,TouchDown起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11744789/

10-11 15:13