![](/img/trans.png)
[英]How do I retrieve the TouchUpInside return on a button (MonoTouch)?
[英]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);
}
這段代碼通常效果很好!
但是,由於某些未知原因,它在我的某些課程中不起作用......
這是問題所在:
事情檢查:
有什么建議嗎?
在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.