2011-04-19 7 views
6

मैंने एक कस्टम UITableViewCell बनाया है, और इसे ठीक से किया है (contentView पर सबकुछ जोड़ना, और layoutSubviews ओवरराइड करना, इसलिए मेरे सबव्यू contentView.bounds से संबंधित हैं)।संपादन करते समय मैं अपने कस्टम UITableViewCell पर इंडेंटेशन की मात्रा कैसे बदल सकता हूं?

जब उपयोगकर्ता संपादन बटन दबाता है, तो तालिका लाल डिलीट साइन के लिए कमरे की अनुमति देने के लिए इंडेंट करती है। यह ठीक है, लेकिन इंडेंटेशन की डिफ़ॉल्ट मात्रा बहुत अधिक है, और मेरे कस्टम सेल को देखती है। मैं इंडेंटेशन की मात्रा कैसे कम कर सकता हूं? setIndentationLevel और tableView:IndentationLevelForRowAtIndexPath कुछ भी नहीं लग रहा है।

(किसी ने एक समान प्रश्न पूछा here, लेकिन इसे कभी हल नहीं किया गया था)।

+0

क्या आपको कोई समाधान मिला? मैं एक ही मुद्दे से पीड़ित हूं। धन्यवाद। – harshitgupta

उत्तर

15

आपको layoutSubviews ओवरराइड करना होगा और निम्न की तरह कुछ करना होगा। और 0 से अधिक कुछ के लिए इंडेंटेशन स्तर सेट करना न भूलें :) कस्टम कोशिकाओं के लिए इंडेंटेशन स्तर डिफ़ॉल्ट रूप से लागू नहीं होता है।

इशारा हटाने के लिए एकल स्वाइप के लिए इंडेंटेशन से बचने के लिए आपको एक और काम करना होगा। एक ऐसा राज्य है जो सेल की संपादन स्थिति को प्रतिबिंबित करता है। यह सार्वजनिक नहीं है लेकिन - (void)willTransitionToState:(UITableViewCellStateMask)aState के साथ पहुंचा जा सकता है, इसलिए इसे किसी संपत्ति में संग्रहीत करना लेआउट व्यू के लिए काम करता है।

willTransitionToState के लिए एप्पल के प्रलेखन:

ध्यान दें कि जब उपयोगकर्ता एक सेल स्वाइप यह सेल संक्रमण करने के लिए राज्य UITableViewCellStateShowingDeleteConfirmationMask निरंतर द्वारा की पहचान को नष्ट करने के लिए, लेकिन UITableViewCellStateShowingEditControlMask है सेट नहीं।

हेडर फाइल

int state; 

... 

@property (nonatomic) int state; 

... 

सेल कार्यान्वयन

@synthesize state; 

... 

- (void)layoutSubviews 
{ 
    [super layoutSubviews]; 

    self.contentView.frame = CGRectMake(0,           
             self.contentView.frame.origin.y, 
             self.contentView.frame.size.width, 
             self.contentView.frame.size.height); 

    if (self.editing 
     && ((state & UITableViewCellStateShowingEditControlMask) 
     && !(state & UITableViewCellStateShowingDeleteConfirmationMask)) || 
      ((state & UITableViewCellStateShowingEditControlMask) 
     && (state & UITableViewCellStateShowingDeleteConfirmationMask))) 
    { 
     float indentPoints = self.indentationLevel * self.indentationWidth; 

     self.contentView.frame = CGRectMake(indentPoints, 
              self.contentView.frame.origin.y, 
              self.contentView.frame.size.width - indentPoints, 
              self.contentView.frame.size.height);  
    } 
} 

- (void)willTransitionToState:(UITableViewCellStateMask)aState 
{ 
    [super willTransitionToState:aState]; 
    self.state = aState; 
} 
+0

पूरी तरह से काम किया। धन्यवाद! –

+0

आह ... मैंने एक समस्या देखी है। इंडेंटेशन वही राशि है जो उपयोगकर्ता संपादन बटन दबाता है या हटाने के लिए स्वाइप करता है। क्या स्वाइप-टू-डिलीट को रोकने और इसे कुछ अलग करने के लिए कहने का कोई तरीका है? –

+0

आह ठीक है, मैंने अभी अपना कोड संपादित किया है और एक सरल समाधान प्रदान किया है। एक नज़र देख लो। –

1

निक वीवर के अद्यतन जवाब अच्छा काम करता है, मुद्दा यह है कि Rec लेवी ने बताया के अलावा:

केवल बात अब है कि जब आप स्वाइप करने वाली हटाकर बाद में रद्द कर (स्क्रीन पर कहीं क्लिक करें) सेल अचानक बाईं ओर छोड़ देता है और फिर वापस स्लाइड के रूप में हटाएँ बटन गायब हो जाता है

मैं में भाग है एक ही समस्या है। मुझे यकीन नहीं है कि यह क्यों हो रहा है, लेकिन सामग्री सेट करते समय एनिमेशन अक्षम करना दृश्य फ्रेम इसे हल करता है।

... 
[UIView setAnimationsEnabled:NO]; 
self.contentView.frame = CGRectMake(indentPoints, 
             self.contentView.frame.origin.y, 
             self.contentView.frame.size.width - indentPoints, 
             self.contentView.frame.size.height); 
[UIView setAnimationsEnabled:YES]; 
संबंधित मुद्दे