2010-12-02 21 views
36

में UIButton मेरे पास UITableViewCell के अंदर एक छवि के साथ UIButton है। जब सेल हाइलाइट किया जा रहा है, तो बटन हाइलाइट किए गए राज्य (यानी छवि की गहरा छाया) में प्रवेश कर रहा है, इस पर ध्यान दिए बिना कि उपयोगकर्ता बटन की सीमाओं के भीतर क्लिक कर रहा है या नहीं।UITableViewCell

मैं इस कार्यक्षमता नहीं करना चाहते - मैं केवल चाहते हैं जब बटन, क्लिक किया जाता है जब नहीं पूरे सेल क्लिक किया जा रहा है बटन पर प्रकाश डाला जा सकता है।

मैंने हाइलाइट किए गए राज्य में छवि को सामान्य छवि के समान होने की कोशिश की है। यह समस्या को हल करता है हालांकि यह वास्तव में हाइलाइट किए जाने पर बटन को रंग बदलने से रोकता है।

कोई विचार वांछित प्रभाव को कैसे प्राप्त करें?

उत्तर

57

यह मुझे पागल गाड़ी चला रहा था। मैं पता लगा है कि आप ओवरराइड करने के लिए setHighlighted:animated: और setSelected:animated:

- (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated { 
    [super setHighlighted:highlighted animated:animated]; 
    self.yourButton.highlighted = NO; 
} 

- (void)setSelected:(BOOL)selected animated:(BOOL)animated { 
    [super setSelected:selected animated:animated]; 
    self.yourButton.selected = NO; 
    // If you don't set highlighted to NO in this method, 
    // for some reason it'll be highlighed while the 
    // table cell selection animates out 
    self.yourButton.highlighted = NO; 
} 
+4

मैं आज इस मुद्दे में भाग गया और इस दृष्टिकोण का उपयोग किया, हालांकि सेल पर टैप करते समय बटन फ्लैश किया गया। मैंने शो को सेट करके इसे हल किया है, इन तरीकों की शुरुआत में और फिर अंत में YES पर वापस स्पर्श करने के लिए। – aranasaurus

+0

@Zemm उत्कृष्ट। मैंने इसे कुछ बार देखा है लेकिन इसे कभी भी ठीक करने में सक्षम नहीं है – codecaffeine

+4

मेरे लिए काम नहीं करता है = ( – Irina

0

वास्तव में इस आज़माया नहीं है, लेकिन आप शायद तुम क्या चाहते थे करने के लिए UIControlEventTouchDown के लिए बटन के लिए कोई लक्ष्य/कार्रवाई जोड़ सकता है कि अपनी प्रकाश डाला राज्य छवि अद्यतन, फिर एक और लक्ष्य/UIControlEventTouchUpInside/UIControlEventTouchUpOutside/UIControlEventTouchCancel कि रीसेट के लिए कार्रवाई सामान्य-राज्य छवि से मेल खाने के लिए हाइलाइट की गई छवि?

0

एक संभावित कामकाज यह होगा कि, आप सेल चयन शैली को कोई भी नहीं सेट करते हैं। उस स्थिति में जब आप सेल का चयन करते हैं, तो इसे हाइलाइट नहीं किया जाएगा।

यह केवल संभव कामकाज है। हो सकता है कि आपके मन में अन्य चीजें हों।

+1

ऐसा होने की आवश्यकता थी। उप-नियंत्रणों के लिए कोई भी हाइलाइट्स और चयनित राज्यों को सेट करने के लिए कुछ भी ऐसा प्रतीत नहीं होता है यदि चयन स्टाइल राज्य किसी के अलावा कुछ भी नहीं है। – Gujamin

2

एक दृष्टिकोण बटन "का चयन रद्द" या "unhighlight" होगा जब तालिका दृश्य सेल का चयन किया जाता है:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    [yourButton setHighlighted:NO]; 
    // do something cool 
} 
+0

यह मेरा पहला विचार था, लेकिन यह केवल सेल चयन के लिए काम करता है, सेल हाइलाइट (टच डाउन इवेंट) के लिए नहीं – Yetanotherjosh

1

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

-(void)tableView:(UITableView *)tableView didHighlightRowAtIndexPath:(NSIndexPath *)indexPath { 
    UIButton *btnAction = (UIButton *) [[tableView cellForRowAtIndexPath:indexPath] viewWithTag:3]; 
    btnAction.highlighted = NO; 
} 


-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    UIButton *btnAction = (UIButton *) [[tableView cellForRowAtIndexPath:indexPath] viewWithTag:3]; 
    btnAction.highlighted = NO; 
} 
0

यह काम करने के लिए, मैं UITableViewCell पर निम्नलिखित उपवर्गीकरण का इस्तेमाल किया था।

- (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated { 
    [self.button setShowsTouchWhenHighlighted:NO]; 
    [super setHighlighted:highlighted animated:animated]; 

    self.button.highlighted = NO; 
    [self.button setShowsTouchWhenHighlighted:YES]; 
} 

- (void)setSelected:(BOOL)selected animated:(BOOL)animated { 
    [self.button setShowsTouchWhenHighlighted:NO]; 
    [super setSelected:selected animated:animated]; 
    self.button.highlighted = NO; 

    // Configure the view for the selected state 
    [self.button setShowsTouchWhenHighlighted:YES]; 
} 

विभिन्न लाइन Interverting बटन की हाइलाइटिंग में हो सकता है: 'बटन' ऑब्जेक्ट कस्टम सेल के अंदर बटन है।

2

codecaffeine के सुझाव मुझे (आईओएस 8.3) के लिए काम नहीं किया है, लेकिन यह मुझे सही रास्ते पर डाल दिया था। मैंने इसे इस तरह संशोधित किया (यह स्विफ्ट में है):

override func setHighlighted(highlighted: Bool, animated: Bool) { 
    var colorBefore = self.myButton.backgroundColor 
    super.setHighlighted(highlighted, animated: animated) 
    self.myButton.highlighted = false 
    self.myButton.backgroundColor = colorBefore 
}