2013-01-18 43 views
5

मैं किसी ऑब्जेक्ट पर UILongPressGesture संदेश कैसे भेज सकता हूं?मैं प्रोग्रामिंग के रूप में UILongPressGesture कैसे भेज सकता हूं?

मुझे पता है कि स्पर्श कैसे भेजें, लेकिन संकेत नहीं। उदाहरण के लिए, अगर मैं एक स्पर्श भेजना चाहता था तो मैं इसका उपयोग कर सकता था:

[button sendActionsForControlEvents: UIControlEventTouchUpInside]; 

और बटन को "अंदर स्पर्श करें" प्राप्त होगा। मुझे एक ही प्रेस को एक लंबे प्रेस इशारा के साथ करने की ज़रूरत है।

स्वचालित यूआई परीक्षण सोचें। इशारा से जुड़े एक चयनकर्ता को बुलाकर अर्थपूर्ण रूप से कुछ भी परीक्षण नहीं किया जाएगा।

+0

"ऑब्जेक्ट को संदेश" से आपका क्या मतलब है? – iProgrammed

+0

@iProgrammed कृपया स्पष्टीकरण के लिए मेरा पासवर्ड प्रश्न देखें। –

उत्तर

7

आयात <UIKit/UIGestureRecognizerSubclass.h> और मैन्युअल रूप से state संपत्ति सेट करें जो आपको अनुकरण करने के लिए आवश्यक राज्यों के अनुक्रम के लिए उपयुक्त है। इससे अतिरिक्त लक्ष्य/एक्शन जोड़े को बुलाया जाएगा। प्रत्येक बार मैन्युअल रूप से राज्य को सेट करने के बाद, संदेशों को प्रेषित करने के लिए आपको रन लूप चलाने देना चाहिए। के रूप में इशारों का एक वास्तविक, 'स्पर्श करके रखें, खींचें, रिलीज' अनुक्रम में पाया जाता है

UILongPressGestureRecognizer के लिए, राज्यों के सही क्रम पाने के लिए, मैं viewDidLoad अंदर एक UIViewController उपवर्ग में निम्नलिखित कोड लिखा है:।

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 कॉल करने के लिए इच्छा हो सकती है लेकिन मैं अपने परीक्षण में इतना या नहीं कर रही के बीच कोई अंतर पाया जाता है), लेकिन अगर आपके उपयोग के मामले स्वचालित है कि लक्ष्यों को सत्यापित करने के लिए परीक्षण और कार्यों को सही ढंग से सेट किया गया है यह आपकी आवश्यकताओं को पूरा कर सकता है।

+0

मेरे पास अभी भी कुछ समय के मुद्दे हैं और इस तरह काम करने के लिए, लेकिन यह मुझे सही रास्ते पर रखता है (और निश्चित रूप से प्रश्न का उत्तर देता है)। धन्यवाद! –

0

क्या आप जानते हैं कि ऑब्जेक्ट ने UILongPressGestureRecognizer से क्या चयनकर्ता चुना है? यदि आप उसे जानते थे, तो आप इसे बस कॉल कर सकते हैं। यदि आप पूछ रहे हैं कि touchesMoved:(UITouch *)touch जैसी कोई विधि है, तो उत्तर का नंबर।

+0

'[बटन sendActionsForControlEvents: UIControlEventTouchUpInside]' की तरह, लेकिन एक स्पर्श ईवेंट के बजाय एक इशारा के साथ। क्या आप अपनी दूसरी वाक्य में कह रहे हैं कि नहीं, यह संभव नहीं है? –