2016-05-11 33 views
1

Hey, ich bin ein Neuling in IOS-Entwicklung. Ich möchte expandieren und kollabieren Tableview, so meinen Code, es zu tun ist:Erweitern und reduzieren Tabellenansicht Zelle

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 

if (indexPath.section != 0) 
{ 
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; 
    NSDictionary *d=[self.arForTable objectAtIndex:indexPath.row]; 
    if([d valueForKey:@"Objects"]) { 
     NSArray *ar=[d valueForKey:@"Objects"]; 

     BOOL isAlreadyInserted=NO; 

     for(NSDictionary *dInner in ar){ 
      NSInteger index=[self.arForTable indexOfObjectIdenticalTo:dInner]; 
      isAlreadyInserted=(index>0 && index!=NSIntegerMax); 
      if(isAlreadyInserted) break; 
     } 
     if(isAlreadyInserted) { 
      [self miniMizeThisRows:ar]; 
     } else { 
      NSUInteger count=indexPath.row+1; 
      NSMutableArray *arCells=[NSMutableArray array]; 
      for(NSDictionary *dInner in ar) 
      { 
       [arCells addObject:[NSIndexPath indexPathForRow:count inSection:1]]; 
       [self.arForTable insertObject:dInner atIndex:count++]; 
      } 
      [tableView insertRowsAtIndexPaths:arCells withRowAnimation:UITableViewRowAnimationTop]; 
     } 
    } 
} 

und meine Reihe Verfahren wie minimieren

-(void)miniMizeThisRows:(NSArray*)ar{ 

for(NSDictionary *dInner in ar) { 
    NSUInteger indexToRemove=[self.arForTable indexOfObjectIdenticalTo:dInner]; 
    NSArray *arInner=[dInner valueForKey:@"Objects"]; 
    if(arInner && [arInner count]>0){ 
     [self miniMizeThisRows:arInner]; 
    } 

    if([self.arForTable indexOfObjectIdenticalTo:dInner]!=NSNotFound) { 
     [self.arForTable removeObjectIdenticalTo:dInner]; 
     [self.tblLeft deleteRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:indexToRemove inSection:1]]withRowAnimation:UITableViewRowAnimationBottom]; 
    } 
} 
} 

Von diesem Verfahren und Codierung I erreicht das Expand and Collapse tableViewCell, das funktioniert . Wie es tableViewCell beim Klicken erweitert und es beim zweiten Mal auf Erweiterbare Zelle klickt.

Aber ich möchte als solche arbeiten: Beim Klicken auf eine beliebige erweiterbare Zelle, andere erweiterbare Zelle wird automatisch zusammenfalten.

Kann jemand mir dabei helfen?

Vielen Dank im Voraus.

Antwort

0

Sie können die letzte Zelle speichern, die nach dem Zusammenbruch erweiterbar war, als didSelectRowAtIndexPath: genannt wird.

nach dem @interface Put:

@property (nonatomic, strong) NSIndexPath *lastIndexPath; 

Jetzt können Sie es in Ihrem didSelectRowAtIndexPath wie verwenden:

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 

    // Collapse the last cell expanded 
    if (indexPath.section != 0) { 
     if(self.lastIndexPath) { 
      UITableViewCell *cell = [tableView cellForRowAtIndexPath:self.lastIndexPath]; 
      NSDictionary *d=[self.arForTable objectAtIndex:self.lastIndexPath.row]; 
      if([d valueForKey:@"Objects"]) { 
       NSArray *ar=[d valueForKey:@"Objects"];    
      } [self miniMizeThisRows:ar]; 
     } 
    } 

    // Save the current indexPath as the last one expanded 
    self.lastIndexPath = indexPath; 

    // This is your current code - I didn't change it 
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; 
    NSDictionary *d=[self.arForTable objectAtIndex:indexPath.row]; 
    if([d valueForKey:@"Objects"]) { 
     NSArray *ar=[d valueForKey:@"Objects"]; 

     BOOL isAlreadyInserted=NO; 

     for(NSDictionary *dInner in ar){ 
      NSInteger index=[self.arForTable indexOfObjectIdenticalTo:dInner]; 
      isAlreadyInserted=(index>0 && index!=NSIntegerMax); 
      if(isAlreadyInserted) break; 
     } 
     if(isAlreadyInserted) { 
      [self miniMizeThisRows:ar]; 
     } else { 
      NSUInteger count=indexPath.row+1; 
      NSMutableArray *arCells=[NSMutableArray array]; 
      for(NSDictionary *dInner in ar) 
      { 
       [arCells addObject:[NSIndexPath indexPathForRow:count inSection:1]]; 
       [self.arForTable insertObject:dInner atIndex:count++]; 
      } 
      [tableView insertRowsAtIndexPaths:arCells withRowAnimation:UITableViewRowAnimationTop]; 
     } 
    } 
} 

Vielleicht müssen Sie den Code ein paar ajustments, aber sehen, ob es Ihnen helfen können.

0

Sie können mürrische erweitern und Einklappen Zellen leicht mit HVTableView

Dies ist eine Unterklasse von UITableView mit expand/collapse Funktion, dass nützlich kommt in vielen Szenarien.

Verwandte Themen