如何發送UILongPressGesture
消息給對象?如何以編程方式發送UILongPressGesture?
我知道如何發送觸摸,但不是手勢。例如,如果我想送觸摸我可以使用:
[button sendActionsForControlEvents: UIControlEventTouchUpInside];
和按鈕將會收到「潤色裏面」。我需要用長按手勢做同樣的事情。
認爲自動UI測試。調用與手勢相關的選擇器並不會有意義地測試任何東西。
如何發送UILongPressGesture
消息給對象?如何以編程方式發送UILongPressGesture?
我知道如何發送觸摸,但不是手勢。例如,如果我想送觸摸我可以使用:
[button sendActionsForControlEvents: UIControlEventTouchUpInside];
和按鈕將會收到「潤色裏面」。我需要用長按手勢做同樣的事情。
認爲自動UI測試。調用與手勢相關的選擇器並不會有意義地測試任何東西。
導入<UIKit/UIGestureRecognizerSubclass.h>
並手動將state
屬性設置爲適合您需要模擬的狀態序列。這會導致添加的目標/操作對被調用。每次手動設置狀態後,都必須讓run循環運行,以便分派消息。
對於UILongPressGestureRecognizer
,如手勢的實際,「觸摸,按住,拖動,釋放」序列被發現得到國家的正確順序,我寫了一個UIViewController
子類下面的代碼裏面viewDidLoad
:
UILongPressGestureRecognizer *r = [[UILongPressGestureRecognizer alloc] init];
[self.view addGestureRecognizer:r];
[r addTarget:self action:@selector(recognize:)];
r.state = UIGestureRecognizerStateBegan;
[[NSRunLoop mainRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.01]];
r.state = UIGestureRecognizerStateChanged;
[[NSRunLoop mainRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.01]];
r.state = UIGestureRecognizerStateEnded;
[[NSRunLoop mainRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.01]];
[r reset];
我想這在生產代碼中會有風險(您可能希望事先調用reset
但我在測試中發現沒有區別),但是如果您的用例是自動測試以驗證目標並且已經正確設置了操作,這可能會滿足您的需求。
我仍然有一些計時問題需要解決,但這使我走上了正確的軌道(並且肯定地回答了這個問題)。謝謝! –
你知道對象與其UILongPressGestureRecognizer
有什麼關聯嗎?如果你知道的話,你可以稱它。如果你問是否有像touchesMoved:(UITouch *)touch
這樣的方法,那麼答案是否定的。
像'[按鈕sendActionsForControlEvents:UIControlEventTouchUpInside]',但是用手勢而不是觸摸事件。你在第二句話中說不,不可能嗎? –
你是什麼意思的「消息對象」? – iProgrammed
@iProgrammed請參閱我的重寫問題的澄清。 –