【发布时间】:2012-07-29 11:53:52
【问题描述】:
我在 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。
这段代码通常运行良好!
但是,由于某些未知原因,它在我的某些课程中不起作用...
问题来了:
- TouchUpInside 不触发。 ...但是,如果我用手指按住按钮并在离开按钮时继续按住手指然后重新进入按钮然后释放按钮,那么......它将触发TouchUpInside,......所以手指需要在按住按钮的同时离开并重新租用按钮以使 TouchUpInside 触发。通常,此代码运行良好。
检查的内容:
- 如果我将 TouchUpInside 替换为 TouchDown,则 TouchDown 可以工作。
- 所有超级视图的“已启用用户交互”设置为 True。
- 所有视图框架(在超级视图中)似乎都在它们的超级视图框架内。
- 我移动了 _buttonTest,发现 _buttonTest TouchUpInside 在 View、SuperView、SuperSuperView 中无法正确触发……但在 SuperSuperSuperView 中却可以正确触发。
有什么建议吗?
【问题讨论】:
-
您尝试过 Monotouch 社区寻求帮助吗?也许您错过了一个技巧,或者只是使用了错误的事件。您使用
TouchUpInside的事实表明该事件将在Touchdown之后发生,不清楚您是否真的知道这一点。 -
我使用
TouchUpInside进行所有按钮点击(所以这是正确的方法),并且没有遇到您提到的问题。按钮顶部的其他视图是否会阻止它被点击? -
我还没有尝试过 Monotouch Community,但也许我很快就会尝试。我希望我错过了一个技巧,但我认为我使用了正确的事件。是的,我知道 TouchUpInside 事件出现在 TouchDown 之后。
-
我也经常使用 TouchUpInside,但这是我第一次遇到这种问题。 ...我会检查我的按钮顶部是否没有其他视图会阻止它被点击....
-
好的,我想我找到了问题所在,...按钮和我在 SuperSuperView 中声明的点击手势之间存在冲突。因此,由于在祖父视图上触发了点击手势,因此它似乎取消了按钮中的 TouchUpInside。我会尝试找到一个优雅的解决方案......否则,......我将不得不禁用 TouchDown 中的点击手势,......然后重新启用 TouchUpInside 中的手势。
标签: c# xamarin.ios uibutton xamarin touch-up-inside