2009-08-15 88 views
2

我在主視圖中禁用了交互(其中包含一些我用作按鈕的子視圖)。是否有可能阻止觸摸添加到隊列中?

我保持禁用,同時我有一個輔助視圖向上指示網絡活動(加載數據)。完成後,我將在主視圖中重新啓用交互。

這樣用戶不會在網絡操作發生時輕敲這些按鈕。

無論如何,一切似乎都很順利,但是如果用戶在主視圖中開始輕擊按鈕,一旦發生重新啓用觸發事件(從過去幾秒鐘)實際觸發。不是觸摸 - 開始,這突出了按鈕,但在觸摸上調用的功能已結束。就像它在整個過程中排隊一樣,它被禁用,「比賽趕上」。

這是非常奇怪的,爲什麼觸摸事件排隊,而視圖的用戶交互被禁用?

回答

4

很難有信心的答案在這裏沒有看到代碼,但這裏是一個想法:

如果您的網絡活動是同步的,又稱阻塞,那麼它可能是用戶的觸摸排隊的情況下,在他們有機會打你的任何代碼之前。如果是這樣的話,那麼在網絡活動結束之前,這些觸摸將不會被髮送到您的響應者鏈中,他們永遠不會有機會「知道」您會禁用與這些控件的交互。

這裏有一種方法可以幫助調試您的情況:在頂層(稱爲輔助視圖)中添加一些指示網絡活動的調試NSLog語句。確保輔助視圖的框架足夠大以包含這些觸摸,並查看它是否在觸碰發生時立即記錄。如果不是,我的猜測可能是正確的。如果是的話,那麼你仍然可以獲得有用的信息 - 而且你也許能夠簡單地捕捉到這個級別的接觸,而不是讓他們排隊等候。

如果這個猜測是正確的,我能想到的最不起作用的修復將會使您的網絡操作異步。

如果您不想這樣做,也可以嘗試在同步呼叫完成後使用NSTimer離開網絡活動指示燈一秒鐘。這樣,您的響應者鏈可以清除傳入觸摸的隊列,並且如果這是期望的行爲則忽略它們。

+0

+1優秀的洞察力。當你突然出現時,我正在寫一個冗長的回答,我馬上就拋棄了它,因爲我的比較而言,我的表現看起來有點荒謬。如果可以的話,我會爲你投票。 – 2009-08-15 22:41:04

+0

謝謝,戴夫!我希望這對邁克爾有用。 – Tyler 2009-08-16 00:16:21

+0

謝謝,我真的不知道問題出在哪裏。基本上這是禁用的背景視圖,以及指示網絡活動的模式窗口。我先禁用背部。這是XML數據的異步加載。一旦數據加載,我將刪除模式窗口,並在後臺重新啓用交互。 無論如何,我絕對沒有得到所有的接觸,禁用交互似乎大部分工作。但是如果我在<1秒內重複點擊數據完成加載,代碼將被執行,並與觸摸相關聯。 我想另一個問題是, – Michael 2009-08-17 21:53:19

相關問題