UITableView के अंदर कस्टम UIButton दबाए जाने के बाद हाइलाइट किया जाता है

मैंने एक कस्टम UIButton लागू किया है, cocoacontrols.com में पोस्ट किया गया है:

http://cocoacontrols.com/platforms/ios/controls/imageless-gradient-buttons

मैंने अभी परियोजना को एआरसी में परिवर्तित कर दिया है और बटन सेट अप किया है। वे काम करते हैं, लेकिन एक बार दबाए जाने के बाद, वे ढाल को हाइलाइट करते रहते हैं।

उन्हें सेट अप करने के लिए, मैंने बस स्टोरीबोर्ड और आईबीओटलेट्स पर कक्षा को बदल दिया है और मैंने उस ढाल का चयन किया है जिसे मैं देखना चाहता हूं।

समस्या क्या हो सकती है पर कोई विचार?

EDIT: I've been spending more time with it and it appears to be that the problem only happens when the button is on a UITableView. It works OK when it is on a UIViewController

EDIT #2: according to the NSLogs, when the container is a UIViewController, the gradient is back to normal when a button is pressed:

2012-05-26 10:53:17.950 GradientButtons[11507:f803] highlighthed
2012-05-26 10:53:18.040 GradientButtons[11507:f803] highlighthed
2012-05-26 10:53:18.140 GradientButtons[11507:f803] Normal

लेकिन जब कंटेनर एक UTableViewController है, बटन उच्च स्तरीय ढाल के साथ रहता है:

2012-05-26 10:55:20.969 GradientButtons[11507:f803] highlighthed
2012-05-26 10:55:21.069 GradientButtons[11507:f803] highlighthed

मैंने viewContentMode की जांच की है और यह सभी बटन, UIView और UITableView (भरने के लिए स्केल) के लिए समान है। इसे फिर से करने के लिए बदलना व्यवहार को बदलता नहीं है।

2
जोड़ा संपादित
विचारों: 1

1 उत्तर

सामान्य/हाइलाइट किए गए ढाल ड्राइंग के लिए ज़िम्मेदार चेक है:

   if (self.state == UIControlStateHighlighted)
        gradient = self.highlightGradient;
    else
        gradient = self.normalGradient;

आपको ब्रेकपॉइंट सेट करने या एनएसएलॉग को जोड़ने के लिए यह देखने के लिए कि सामान्य ढाल का चयन किया गया है या नहीं। यदि ऐसा नहीं होता है, तो अगला चरण सामान्य UIButton drawRect को राज्य लॉग जोड़ने के लिए ओवरराइड करना होगा। यह देखने के लिए रंगीन बटनों के बजाय इसका उपयोग करें कि यह आपकी तालिका के लिए एक मानक UIButton व्यवहार है (उदाहरण के लिए आप बटन क्लिक करने के बाद सेल को हाइलाइट कर सकते हैं जो सबव्यूज़ को हाइलाइट करने के लिए बाध्य करता है)


आपके लॉग के आधार पर मुझे यह आश्चर्य हुआ कि समस्या को पुन: उत्पन्न किया गया है, ऐसा लगता है कि हाइलाइट किए गए राज्य को touchesEnded पर पकड़ा जा सकता है (लगभग एक सेकंड के लिए क्लिक करने का प्रयास करें - राज्य सामान्य touchesEnded पर हो)। कारण के रूप में आगे की जांच की आवश्यकता है, एक कामकाज के रूप में आप निम्नलिखित कोड का उपयोग कर सकते हैं:

-(void) setHighlighted:(BOOL)highlighted
{
    NSLog(@"setHighlighted %@", highlighted ? @"Y": @"N");
    [super setHighlighted:highlighted];
    [self setNeedsDisplay];
}
2
जोड़ा
मैंने NSLogs को जोड़ा है। जाहिर है जब बटन टेबल पर है, तो दबाए जाने के बाद यह सामान्य पर वापस नहीं जाता है।
जोड़ा लेखक Marcal, स्रोत
मैं उस आशंका की कोशिश करूंगा। हालांकि, किसी और चीज से अधिक, मैं वास्तव में जानना चाहता हूं कि टेबलव्यू में केवल क्यों होता है। मैंने संदर्भ के रूप में इस बटन का उपयोग कर एक कस्टम कीपैड किया है। उत्सुक है, जब कस्टम कीपैड को टेबलव्यू पर बुलाया जाता है, तो यह बहुत सामान्य व्यवहार करता है। बिल्कुल भी परेशानी नहीं है...
जोड़ा लेखक Marcal, स्रोत
कामकाज अच्छी तरह से काम करता है, बहुत बहुत धन्यवाद। मैं अच्छा होगा, हालांकि यह पता लगाने के लिए कि यह समस्या कहां से आती है। एक बार फिर धन्यवाद!
जोड़ा लेखक Marcal, स्रोत
धन्यवाद, यह दिलचस्प है, उत्तर अद्यतन देखें।
जोड़ा लेखक A-Live, स्रोत
@Marcal अब जब आपने इसे दोबारा वर्णित किया है और मेरे पास परीक्षण करने के लिए एक नमूना प्रोजेक्ट है, तो मैं तालिका तालिका के बजाए रूट UIView पर एक बटन जोड़कर एक ही समस्या की पुष्टि कर सकता हूं। यह subclassing कार्यान्वयन की एक समस्या होनी चाहिए, जब तक आप setNeedsDisplay को ओवरराइड करना चाहते हैं और हाइलाइट किया गया बदलना चाहते हैं, तब तक प्रस्तावित कार्यवाही में मुझे कुछ भी गलत नहीं दिखाई दे रहा है। हालांकि, अन्य संबंधित समस्याएं हो सकती हैं, मैं इसे बेहतर तरीके से हल करने के लिए समस्या के स्रोत को भी समझना चाहूंगा।
जोड़ा लेखक A-Live, स्रोत