gpt4 book ai didi

c# - Monotouch TouchUpInside 不起作用,TouchDown 起作用

转载 作者:行者123 更新时间:2023-11-30 17:10:53 25 4
gpt4 key购买 nike

我在 Objective-C 中看到了一些关于这个主题的话题。我读了很多,花了 2 天时间试图找到解决方案,但没有一个对我有用。我主要在 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。

此代码通常运行良好!

但是,由于某些未知原因,它在我的某些类(class)中不起作用...

问题是:

  • TouchUpInside 不触发。 ...但是,如果我用手指按住按钮并在离开按钮的同时按住手指,然后重新输入按钮然后松开按钮,那么....它会触发 TouchUpInside,....所以手指需要在按住按钮的同时离开并重新按下按钮才能使 TouchUpInside 触发。通常,此代码运行良好。

检查的内容:

  • 如果我将 TouchUpInside 替换为 TouchDown,则 TouchDown 会起作用。
  • 所有 super View 的“已启用用户交互”设置为 True。
  • 所有 View 框架(在父 View 中)似乎都在它们的父 View 框架内。
  • 我四处移动了 _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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com