[Iphone] तालिका दृश्य कोशिकाओं का विस्तार करना गायब हो रहा है



Answers

मेरी भी यही समस्या थी। मैं पुष्टि करता हूं कि पंक्ति को पुनः लोड करने पर एनीमेशन का उपयोग करने से ठीक काम हो रहा है।

लेकिन यह पता चला है कि सेलफोररावएटआईंडएपपैथ में एक कैश्ड यूआईटीबल वीजसेल लौटने के कारण समस्या होती है, जब वास्तव में एक ताजा एक की आवश्यकता होती है।

ReloadRowsAtIndexPaths के लिए डॉक्टर: withRowAnimation: कहते हैं: "एक पंक्ति को पुनः लोड करने से उस दृश्य के लिए एक नया सेल के लिए अपने डेटा स्रोत को पूछने के लिए तालिका दृश्य का कारण बनता है।"

आपका सेलफोररौअटइंडएपपाथ विधि स्थानीय रूप से कैशेड सेल लौट रही है। एक नया सेल लौटने से मेरे मामले में समस्या तय हो गई और कोई कामकाज की जरूरत नहीं थी ...

Question

मेरे पास एक सेल है जो एक सेट के साथ उनकी ऊंचाई को बदलकर विस्तारित है: विधि कॉल

फिर मैं फिर से लोड करें RowsAtIndexPaths को कॉल करता हूं: कोशिकाओं को रीफ़्रेश करने के लिए

समस्या यह है कि कोशिकाएं गायब हो जाती हैं और यादृच्छिक रूप से पुनः दिखाई देती हैं। मुझे संदेह है कि यह जिस तरह से अनुक्रमण काम कर रहा है के कारण है।

अगर मैं पुन: लोडडेटा या शुरूअनुरूपी / एंड अपडेट्स को कॉल करता हूं, तो अपेक्षित काम करता है, लेकिन मैं एनिमेशन खो देता हूं।

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    JVCell *cell = (JVCell*)[tableView cellForRowAtIndexPath:indexPath];
    JVCell *previousCell = nil;

    if( previousIndexPath_ != nil ) // set to nil in viewDidLoad
    {
        previousCell = (JVCell*)[tableView cellForRowAtIndexPath:previousIndexPath_];
    }


    // expand or collapse cell if it's the same one as last time
    if( previousCell != nil && [previousIndexPath_ compare:indexPath] == NSOrderedSame && [previousCell expandable] )
    {
        [previousCell setExpanded:![cell expanded]];
        NSArray *indexPathArray = [NSArray arrayWithObject:previousIndexPath_];
        [tableView reloadRowsAtIndexPaths:indexPathArray withRowAnimation:UITableViewRowAnimationAutomatic];
    }
    else
    {
        // collapse previous cell
        if( previousCell != nil && [previousCell expandable] )
        {
            if( [previousCell expanded] ) [previousCell setExpanded:NO];
            NSArray *indexPathArray = [NSArray arrayWithObject:previousIndexPath_];
            [tableView reloadRowsAtIndexPaths:indexPathArray withRowAnimation:UITableViewRowAnimationAutomatic];
        }

        // expand new cell
        if( [cell expandable] )
        {
            [cell setExpanded:YES];
            NSArray *indexPathArray = [NSArray arrayWithObject:indexPath];
            [tableView reloadRowsAtIndexPaths:indexPathArray withRowAnimation:UITableViewRowAnimationAutomatic];
        }
    }

    previousIndexPath_ = indexPath;

    // works as expected, but I lose the animations
    //[tableView reloadData];

    // works as expected, but I lose the animations
    //[tableView beginUpdates];
    //[tableView endUpdates];
}

संपादित करें: cellForRowAtIndexPath और heightForRowAtIndexPath विधियों को शामिल करने के लिए अपडेट किया गया:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSUInteger section = [indexPath section];
    NSUInteger row = [indexPath row];
    JVCellSectionData *sectionData = [sections_ objectAtIndex:section]; // NSArray of SectionData objects
    NSArray *cellArray = [sectionData cells]; // NSArray of cells
    UITableViewCell *cell = [cellArray objectAtIndex:row];
    return cell;
}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    NSUInteger section = [indexPath section];
    NSUInteger row = [indexPath row];
    JVCellSectionData *sectionData = [sections_ objectAtIndex:section];
    NSArray *cellArray = [sectionData cells];
    JVCell *cell = [cellArray objectAtIndex:row];
    return [cell cellHeight]; // changed when selected with setExpanded: method
}

2 संपादित करें: मैंने जो कुछ हो रहा है और स्क्रीन शॉट निकाला है, उसका एक क्विकटाइम वीडियो बनाया है।

मैं क्या करने का प्रयास कर रहा हूं सेल को विस्तारित करता है, सेल की जगह नहीं, सम्मिलित या हटाता है। प्रत्येक कक्ष में एक या अधिक सबव्यूज़ हैं सेल की ऊँचाई यह निर्भर करती है कि यह 'विस्तारित' है या नहीं। सामग्री दृश्य में उसमें जोड़ा गया सबव्यूज़ है, और यह क्लिपटौबॉउन्स संपत्ति है हां। जब कक्ष कोशिका के फ्रेम (पृष्ठभूमि दृश्य और चयनित पृष्ठभूमि दृश्य सहित) के साथ ऊँचाई का मूल्य बढ़ता है या फैलता है मैंने विस्तार के दौरान, उसके दौरान और उसके बाद के सभी फ्रेम मान लॉग इन किए हैं, और वे सभी अपने राज्य और स्थिति के अनुरूप हैं

ध्यान रखें कि यह सामान्य रूप से आईओएस 4.3 पर काम करता है, जैसा कि नीचे दिखाया गया है:




में:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

आपको एक नया सेल वापस करना होगा यदि सेल आपको एक नया बनाने की आवश्यकता नहीं है, तो आपको केवल आवश्यकता है:

[tableView beginUpdates];
[tableView endUpdates];

reloadRowsAtIndexPaths करने के लिए कॉल करने की कोई आवश्यकता नहीं है reloadRowsAtIndexPaths




मुझे लगता है जैसे सेल ठीक से नहीं निकाला जाता है

क्या आपने ऐसा कुछ करने की कोशिश की:

[cell.backgroundView setNeedsDisplay]



Links