2009-04-25 17 views
19

मेरे पास 10 के अंदर UIButton सबव्यूव है।UIButton राज्य परिवर्तन में देरी

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

इसका मतलब है कि यदि उपयोगकर्ता आमतौर पर बटन को टैप करता है, तो हाइलाइट किया गया राज्य कभी नहीं दिखाया जाता है।

ऐसा क्यों होता है और मैं इसे कैसे ठीक कर सकता हूं?

+0

जिज्ञासा से, क्या यह सिम्युलेटर या डिवाइस पर है? –

उत्तर

0

संपादित करें: पूरी तरह से सवाल एक UIButton के बारे में सोच की

एक तरह से की एक गलतफहमी निम्नलिखित फिर से लिखा है स्क्रीन के एक क्षेत्र की स्थापना के एक आशुलिपि तरीका है कि विभिन्न तात्कालिक स्पर्श इवेंट प्रतिक्रिया का जवाब कर सकते हैं यह अन्य वस्तुओं को संदेश देने के लिए यूआईसींट्रोल की लक्ष्य-क्रिया प्रणाली द्वारा परिभाषित किया गया है।

UIControlEventTouchDown ऐसा लगता है जिसकी आपको प्रतिक्रिया देने की आवश्यकता है। जैसे ही कोई आपके बटन के अंदर छूता है, यह ट्रिगर हो जाएगा - एसएमएस में "संपर्क जानकारी" बटन यही है।

UIButton * myButton = [[UIButton बटन WithType: UIButtonTypeRoundedRect]; // सेट अप शीर्षक, फ्रेम इत्यादि [myButton addTarget: self action: @selector (myButtonWasPressed) forControlEvents: UIControlEventTouchDown]; [myMainView addSubView: myButton];

इस कोड से चलने वाले ऑब्जेक्ट पर -(void)myButtonWasPressed संदेश भेजें (आदर्श रूप से आप नियंत्रक देखते हैं)। myButtonWasPressed में आप फिर एक नया दृश्य जोड़ सकते हैं या अपनी पसंद की कोई भी कार्रवाई कर सकते हैं। एक एसएमएस नेविगेशन नियंत्रक का उपयोग कर संपर्क जानकारी प्रदर्शित करने के लिए एक दृश्य नियंत्रक को धक्का देता है।

यदि यह अभी भी आपकी समस्या का समाधान नहीं करता है, तो आपको कुछ गलत पोस्ट करने के लिए कुछ कोड पोस्ट करने होंगे।

+0

मुझे लगता है कि आप गलत समझते हैं। यदि आप उदाहरण के लिए एसएमएस ऐप देखते हैं, तो संदेश थ्रेड के शीर्ष पर आइकन तुरंत छूने के लिए प्रतिक्रिया देते हैं। मैं कह रहा हूं कि मेरे बटन हाइलाइट किए गए राज्य पर तत्काल प्रतिक्रिया नहीं दिखाते हैं। मैं नहीं चाहता कि उपयोगकर्ता बटन दबाए रखें। मैं चाहता हूं कि वे सामान्य रूप से एक बटन का उपयोग करें, लेकिन बटन की स्थिति बदलें और अपेक्षित के रूप में बटन की दृश्य उपस्थिति में दिखाई दे। –

+0

ठीक है अभी भी एक गलतफहमी है :)। मेरे बटन के कार्यों या घटनाओं में कुछ भी गलत नहीं है। जो मैं वर्णन कर रहा हूं उसे फिर से बनाने के लिए बस एक नया UITableViewCell बनाएं, और इसके सबव्यू के रूप में UIButton जोड़ें: यानी [cell.contentView addSubview: button]। फिर डिवाइस पर इसका परीक्षण करें। जब आप बटन को स्पर्श करते हैं, तो कार्रवाई सही ढंग से आग लग जाएगी, हालांकि बटन की हाइलाइट की गई स्थिति तुरंत नहीं होती है। इसके बजाय, आपको बटन * दृश्यमान * परिवर्तन स्थिति देखने से पहले आपको आधे सेकेंड तक बटन दबा देना होगा। मैं बस बटन की दृश्य उपस्थिति के बारे में बात कर रहा हूं। –

10

समस्या यह है कि आपका UIButton UITableView के अंदर है। इसका अर्थ यह है कि तालिका दृश्य को यह निर्धारित करना है कि आपकी टैप स्वाइप हो रही है या यदि यह बटन के लिए केवल एक टैप है। तालिका दृश्य को UIButton को एक संदेश भेजने में देरी होनी चाहिए जब तक कि यह नहीं जानता कि उपयोगकर्ता स्वाइप करने का इरादा नहीं रखता है और इसलिए बटन दबाए जाने के बजाय दृश्य को स्क्रॉल करता है।

यदि आपको टेबल व्यू की आवश्यकता नहीं है, तो UITableView से छुटकारा पाएं।

+0

मैं इसे भी देख रहा हूं और इस टिप्पणी के साथ मेरा एकमात्र मुद्दा यह है कि यूआईएसविच जैसे किसी अन्य नियंत्रण का उपयोग इस तरह के अंतराल का उत्पादन नहीं करता है। – d2burke

3

मैं सिर्फ लक्ष्य कार्रवाई विधि के भीतर से छवि बदलने:

[sender setBackgroundImage:[UIImage imageNamed:@"highlighted-image.png"] forState:UIControlStateNormal]; 

यह तुरंत पृष्ठभूमि छवि बदल जाता है।

+0

यह काम करता है, धन्यवाद! –

25

मुझे अभी इस समस्या का सामना करना पड़ा और देखा कि यह मुद्दा बंद नहीं किया गया था। थोड़ी देर के लिए चारों ओर घूमने के बाद मुझे इसके लिए एक फिक्स मिला।

अब आप देरी को बंद कर सकते हैं या तालिका दृश्य पर "देरी सामग्री स्पर्श" बॉक्स को अनचेक कर इसे ठीक कर सकते हैं।

एकमात्र नकारात्मक दुष्प्रभाव यह है कि उपयोगकर्ता एक बटन पर टैप करने और स्क्रॉलिंग इशारा शुरू करने में सक्षम नहीं होगा। हालांकि, यदि उपयोगकर्ता कहीं से भी स्क्रॉल करने की कोशिश करता है जो स्वयं को स्पर्श स्वीकार नहीं करता है, तो व्यवहार पहले जैसा ही होना चाहिए।

+0

मैंने इसके लिए समाधान खोजने की कोशिश कर 8 घंटे बिताए। बहुत बहुत धन्यवाद। – maxhud

+0

मुझे स्क्रॉलव्यू पर UIButton के साथ एक ही समस्या थी। यह तय है। –

+0

यह मेरे लिए काम करता है, धन्यवाद। U12crollView पर इसे सेट करने के लिए –

10

डेविड हॉज के उत्तर के लिए ऊपर।

मैं सिर्फ डेविड द्वारा वर्णित "केवल नकारात्मक दुष्प्रभाव" को हटाने के लिए एक तरीका जोड़ना चाहता हूं: यदि आप UIScrollView में UICrollView में UIcontrol के अंदर स्क्रॉल करना प्रारंभ करते हैं तो CONTontTouches = NO, स्क्रॉलिंग काम नहीं करती है।

समाधान उपवर्ग UIScrollView (या UITableView मूल प्रश्न के रूप में) और ओवरराइड:

-(BOOL) touchesShouldCancelInContentView:(UIView *)view { 
return YES; 
} 

आपका UIControls अंदर UIScrollView/UITableView नल पर तुरंत अपने राज्य बदल जाएगा और scrollviews भी स्क्रॉल करने के लिए सक्षम हो जाएगा अगर कुछ यूआईसींट्रोल पर स्पर्श शुरू होता है। एक जादू की तरह काम करता है।

+0

कभी नहीं कहा जाता है। –

संबंधित मुद्दे