2015-09-21 7 views
0

1) Вот проблема. Я разрабатываю приложение iOS, где мне нужно показать содержимое ячейки при нажатии на раздел (мои пользовательские разделы). У меня есть 2 таких раздела. Теперь логика, которую я использовал здесь, заключается в том, что я скрываю ячейку, пока не нажму на ее раздел. Но проблема, с которой я столкнулась в этом отношении, заключается в том, что когда 1-я ячейка расширяется, она перекрывается со вторым сектором на долю second.The причиной этого является следующий код:Разверните пользовательские ячейки раздела в UITableView

//call to UITableView Delegate method 'cellForRowAtIndexPath:' 
    [tableView beginUpdates]; 
    //some code 
    [tableView endUpdates]; 

Теперь я звоню «cellForRowAtIndexPath:» чтобы показать мою камеру, но она будет выполнена после обновления.

2) Вторая логика, о которой я думал, заключалась в том, что я устанавливал высоту для каждой строки как 0. На самом деле это не помогает, поскольку конструкции как пользовательских ячеек перекрываются друг с другом.

Что мне теперь делать?

+0

Если мой код полезно youe PLese маркируют как ответ. – BHUMICA

ответ

1

Используйте следующий код для расширяемой ячейки в UITableView

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"Cell"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) { 
     cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; 
    } 
    cell.textLabel.text=[[self.arForTable objectAtIndex:indexPath.row] valueForKey:@"name"]; 
    [cell setIndentationLevel:[[[self.arForTable objectAtIndex:indexPath.row] valueForKey:@"level"] intValue]];  
    return cell; 
} 

код для расширения & рушатся строк - TableView DidSelectRow Метод

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    [tableView deselectRowAtIndexPath:indexPath animated:YES]; 
    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:0]]; 
       [self.arForTable insertObject:dInner atIndex:count++]; 
      } 
      [tableView insertRowsAtIndexPaths:arCells withRowAnimation:UITableViewRowAnimationLeft]; 
     } 
    } 
} 

метод, который поможет минимизировать & разворачивания/расширение коллапса строк ,

-(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.tableView deleteRowsAtIndexPaths: 
       [NSArray arrayWithObject:[NSIndexPath indexPathForRow:indexToRemove inSection:0]] 
         withRowAnimation:UITableViewRowAnimationRight]; 
     } 
    } 
} 

Download code from here

+0

Спасибо, но я написал код, который намного проще, чем этот код. Он использует один NSString, который переключается по мере того, как строка расширяется до контрактов. Стоит большое спасибо !!! – Reckoner

Смежные вопросы