2009-05-17 20 views
7

पर नियंत्रण को पुन: व्यवस्थित करने के बगल में सफेद रेखा को हटाएं मैंने अपनी तालिका के लिए एक कस्टम UI बनाया है जिसमें एक गहरा यूआई और कस्टम एक्सेसरी व्यू है। जब मैं तालिका को संपादन मोड में डालता हूं, तो रीडर नियंत्रण के बाईं ओर एक सफेद रेखा होती है जिसे मैं छुटकारा नहीं पा रहा हूं।समूहित UITableViewCell

tableView: accessoryTypeForRowWithIndexPath: के बाद से मैं एक मानक UITableViewCellAccessoryType उपयोग नहीं करते समय यह से छुटकारा पाने के लिए उपयुक्त हो प्रतीत नहीं होता है, तो मैं क्या मैं यह नहीं दिखाना चाहते प्राप्त करने के लिए क्या कर सकते हैं के बारे में सुनिश्चित नहीं कर रहा हूँ मेरी कोशिकाओं पर

White Line Example http://secondgearsoftware.com/attachments/stackoverflow_reorder.png

उत्तर

12

क्या हो रहा है यह है कि जब UITableViewCell पुनरावृत्ति नियंत्रण दिखाता है तो यह उपखंडों की सरणी में एक खाली, 1 पिक्सेल चौड़ा, सफेद UIView भी जोड़ता है।

स्पष्ट रूप से: यह एक बग है जिसे ऐप्पल को ठीक करना चाहिए।

हालांकि, आप हर बार दिखाई देने वाले परेशान दृश्य को ढूंढकर और इसके पृष्ठभूमि रंग को पारदर्शी रूप से सेट करके इसे प्राप्त कर सकते हैं। त्वरित टिप: कष्टप्रद सफेद दृश्य हमेशा UITableViewCell के सबव्यूज़ सरणी में अंतिम होता है और हमेशा 1 पिक्सेल चौड़ा होता है। हम इसे खोजने के लिए इसका इस्तेमाल करेंगे।

जब आप तालिका के लिए संपादन चालू करते हैं, तो सभी दृश्यमान परेशान 1 पिक्सेल दृश्य पारदर्शी बनाएं। तो कार्रवाई विधि है जो मेज पर "संपादित करें" मोड टॉगल इस प्रकार दिखाई देंगे:

- (IBAction)edit:(id)sender 
{ 
    [tableView setEditing:!tableView.editing animated:YES]; 

    for (UITableViewCell *cell in [tableView visibleCells]) 
    { 
     if (((UIView *)[cell.subviews lastObject]).frame.size.width == 1.0) 
     { 
      ((UIView *)[cell.subviews lastObject]).backgroundColor = 
       [UIColor clearColor]; 
     } 
    } 
} 

और के रूप में वे अपने UITableViewDelegate में इस लागू करने से दिखाई देने लगते हैं सभी नए विचारों के लिए ऐसा करने का ध्यान रखें:

- (void)tableView:(UITableView *)tableView 
    willDisplayCell:(UITableViewCell *)cell] 
    forRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if (((UIView *)[cell.subviews lastObject]).frame.size.width == 1.0) 
    { 
     ((UIView *)[cell.subviews lastObject]).backgroundColor = 
      [UIColor clearColor]; 
    } 
} 

समस्या को ठीक करने के लिए यह हैक काफी निर्दोष है और यदि ऐप्पल भविष्य में बग को ठीक करता है (कष्टप्रद 1 पिक्सेल दृश्य जोड़ना बंद करें), तो यह कोड चुपचाप कुछ भी करना बंद कर देना चाहिए।

+0

यह एक आकर्षण की तरह काम करता है। धन्यवाद मैट। मैं मानता हूं कि यह वांछनीय व्यवहार नहीं है इसलिए मैं ऐप्पल के साथ एक बग फाइल करूंगा। –

+0

एक्सकोड 3.2.4 और आईओएस एसडीके 4.1 में यह कोशिश करते समय, ऑब्जेक्ट अंतिम तत्व नहीं है, अंतिम तत्व नहीं है। यह काम नहीं किया। – chrish

2

कोई त्वरित जवाब यहाँ है, लेकिन आप क्या विशिष्ट देखें निर्धारित कर सकते हैं इस सफेद लाइन के लिए कौन जिम्मेदार है?

इस तरह की समस्याओं को "डीबग" करने के लिए कभी-कभी उपयोग की जाने वाली एक चाल है जो संभावित संदिग्ध दृश्यों के पृष्ठभूमि रंगों को बदलना है। मैं TableViewCell के पृष्ठभूमि रंग के साथ-साथ इसकी सामग्री को लाल या नीले रंग में देख सकता हूं और देख सकता हूं कि आप रेखा का रंग बदल सकते हैं या नहीं। इससे आपको कम से कम समस्या की प्रकृति और शायद इसे हल करने के बारे में कुछ विचारों के बारे में एक सुराग मिलेगा।

1

आप वास्तव में दृश्य को पकड़ सकते हैं और इसे संशोधित कर सकते हैं जब एक सेल संपादन स्थिति में परिवर्तित हो जाता है। इस विधि को अपने कस्टम UITableViewCell पर ओवरराइड जोड़ें (और कस्टमाइज़ करें)।

- (void)didTransitionToState:(UITableViewCellStateMask)state 
{ 
//modified from comments here: 
//http://www.erasetotheleft.com/post/overriding-the-drag-reorder-control-in-uitableviewcell/ 

if(state == UITableViewCellStateEditingMask) 
{ 
    for (UIControl *control in self.subviews) 
    { 
    // Find the Reorder Control 
    if ([control isMemberOfClass:NSClassFromString(@"UITableViewCellReorderControl")] && [control.subviews count] > 0) 
    { 
    // Do something with the control 
    } 
    } 
} 
} 
+0

इसके लिए धन्यवाद। मैं इस पुनर्निर्माण नियंत्रण की तलाश में था। – Dimitris

+0

एक्सकोड 3.2.4 और आईओएस एसडीके 4.1 में यह कोशिश करते समय, रेखा अभी भी पहली बार दिखाती है। उसके बाद यह छिपा हुआ है। – chrish

2

@ मैट-Gallagher और @bryce से समाधान की कोशिश कर के बाद, मैं दो संयुक्त और setEditing है, जिसकी ओवरराइड बनाया।

- (void)setEditing:(BOOL)editing animated:(BOOL)animated { 

    [super setEditing:editing animated:animated]; 

    for (UIControl *control in self.subviews) { 
     if (control.frame.size.width == 1.0f) { 
      control.backgroundColor = [UIColor clearColor]; 
     }     
    } 
} 
0

मुझे एक समान समस्या है लेकिन UITableViewStylePlain में।

मेरे समाधान धन्यवाद @chrish और @ मैट-Gallagher के लिए:

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    for (UIView *control in cell.subviews) 
    { 
     if (control.frame.size.width == 1.0f) 
     { 
      control.backgroundColor = [UIColor clearColor]; 
     }     
    } 
}