प्रोग्रामिक रूप से फायर बटन क्लिक इवेंट?


126

क्या प्रोग्राम बटन पर क्लिक करने की घटना को आग लगाने का एक तरीका है? मेरे पास एक UIView में एक बटन है, और एक विशेष परिदृश्य में मैं कोड के माध्यम से बटन पर क्लिक करना चाहता हूं, मैन्युअल रूप से उपयोगकर्ता के रूप में नहीं। क्या यह iOS के विकास में संभव है? कृपया अपने सुझाव दें और मुझे बताएं कि यह कैसे करना है।

धन्यवाद।

जवाबों:


314

केन के उत्तर की तरह क्रमबद्ध करें, लेकिन यदि आप उन्हें बदलते हैं या एक से अधिक जोड़ते हैं, तो यह बटन वास्तविक क्रियाओं का ट्रैक रखेगा।

[button sendActionsForControlEvents:UIControlEventTouchUpInside];

8
क्या यह बटन को उजागर करता है अगर button.showsTouchWhenHighlighted = YESयह एक वास्तविक स्पर्श के साथ होता है?
chown

2
यह उत्तर बहुत अच्छा है / b इसे आसानी से UISwitch (UIControlEventValueChanged) जैसे अन्य नियंत्रणों में अनुवादित किया जा सकता है और मेरे मामले में सीधे लक्ष्य / एक्शन कोड को कॉल करने से बेहतर है b / c मैं स्विच को स्विच करना चाहता हूं! धन्यवाद।
जॉन एर्क

नहीं अगर यह बटन को उजागर नहीं करता है, तो बटन। ShowsTouchWhenHighlighted = YES। ;
रिची हयात

7
यदि आपको हाइलाइट चाहिए तो आप ऐसा कर सकते हैं। [बटन setHighlighted: हाँ]; [बटन sendActionsForControlEvents: UIControlEventTouchUpInside]; [बटन setHighlighted: NO]; और यह बहुत अच्छा काम करता है। -राह
रिची हयात

हैलो @ ज़ाकी, अगर मुझे केवल एनीमेशन चाहिए, बिना कार्रवाई के, मैं इसे कैसे कर सकता हूं?
बेनी

13

मेरे पास ऊपर जैसा ही मुद्दा था। मैंने एक टिप्पणी पोस्ट की होगी, लेकिन मेरी प्रतिष्ठा बहुत अधिक नहीं है। इसलिए, मैं इसके बजाय पूरा उत्तर पोस्ट करूंगा:

[btn setHighlighted:YES];
[btn sendActionsForControlEvents:UIControlEventTouchUpInside];
[btn performSelector:@selector(setHighlighted:) withObject:NO afterDelay:0.25];

यह प्रोग्राम बटन को हिट करेगा और इसे सामान्य रूप से सामान्य समय के लिए हाइलाइट करेगा। रिची के सुझाव ने काम नहीं किया क्योंकि समय की एक अगोचर राशि के लिए बटन को केवल हाइलाइट किया गया था (यदि बिल्कुल भी)।


यह हाइलाइट नहीं किया गया था, ड्राइंग केवल कोड के वर्तमान चंक को समाप्त करने के बाद होती है। यह एक अच्छा फिक्स है।
Mattsven

6

जब उपयोगकर्ता बटन दबाता है तो केवल उस कोड को निष्पादित क्यों नहीं करता है?

-(void)myMethod
{
   // do stuff
}

-(IBAction)myButtonClick:(id)sender
{
    [self myMethod];
}

-(void)clickMyButton
{
    [self myMethod];
    // OR
    [self myButtonClick:nil];
}

नहीं, मेरी आवश्यकता विधि को कॉल करने की नहीं है, बटन को क्लिक करने के लिए प्रोग्राम को कैसे फायर करना है, न कि उपयोगकर्ता द्वारा मैन्युअल रूप से क्लिक करने पर। मैंने एक यूआईयूवीवाई में एक यूआईब्यूटॉन प्रोग्रामेटिक रूप से बनाया है, मैं प्रोग्राम के माध्यम से एक निश्चित समय अंतराल के बाद स्वचालित रूप से घटना पर क्लिक करना चाहता हूं, उपयोगकर्ता द्वारा नहीं।
18:11

फिर यह स्पर्श को संश्लेषित किए बिना संभव नहीं है। Cocoawithlove.com/2008/10/… देखें । हालाँकि, आप इस विधि का उपयोग करके अपने ऐप को ऐप स्टोर में जमा नहीं कर सकते, क्योंकि यह एक निजी एपीआई का उपयोग करता है। यह आमतौर पर डिबगिंग उद्देश्यों के लिए उपयोग किया जाता है।
इवान मुलावस्की

आप यह नहीं समझाते हैं कि आपको विधि को कॉल करने के लिए एक स्पर्श बनाम अनुकरण करने की आवश्यकता क्यों है लेकिन यह अब तक का सबसे आसान तरीका है। आपकी टाइमर कार्रवाई आपके इच्छित किसी भी तरीके को कॉल कर सकती है और यह जिस विधि से कॉल करती है वह यूआई में प्रतिक्रिया दे सकती है कि बटन को बटन स्थिति बदलकर दबाया जा रहा है (चयनित, हाइलाइट किया गया, आदि)। अगर वह काम नहीं करेगा, तो यह हो।
XJones

1

यदि आप एक UIButton के बारे में बात कर रहे हैं, तो आप केवल उसी विधि को कॉल कर सकते हैं जिसे UIButton कॉल कर रहा है जब वह टैप किया गया हो। उदाहरण के लिए:

[self myButtonsTargetMethod];

नहीं, मेरी आवश्यकता विधि को कॉल करने की नहीं है, बटन को क्लिक करने के लिए कैसे प्रोग्राम को फायर करें, न कि उपयोगकर्ता द्वारा मैन्युअल रूप से क्लिक करने पर। मैंने एक यूआईयूवीवाई में एक यूआईब्यूटॉन प्रोग्रामेटिक रूप से बनाया है, मैं प्रोग्राम के माध्यम से एक निश्चित समय अंतराल के बाद स्वचालित रूप से घटना पर क्लिक करना चाहता हूं, उपयोगकर्ता द्वारा नहीं।
Getsy

1

हाँ,

[_button setHighlighted:YES];
[_button sendActionsForControlEvents:UIControlEventTouchUpInside];
[_button setHighlighted:NO];

लेकिन यहाँ समस्या यह है कि आप उन घटनाओं को नहीं देख पाएंगे क्योंकि यह बहुत तेज़ है। तो आप क्या कर सकते हैं NSTimer के साथ उपरोक्त कोड की कोशिश करें।

NSTimer *quick = [NSTimer scheduledTimerWithTimeInterval:2.5 target:self selector:@selector(MeFirst:) userInfo:nil repeats:NO];

MeFirst वह विधि है जिसे मैंने बनाया है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.