簡體   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