2013-06-11 1 views
0

Я сделал UITableView заполнены с источником PLIST данных, и я сделал пользовательские ячейки с Interface Builder (так я использую XIB файлы)Развернуть/свернуть UITableViewCell с другой клеткой и источником данных

вот часть кода где я создаю клетку:

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

    static NSString *CellIdentifier = @"Cell"; 

    DataTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) { 

     NSArray *views = [[NSBundle mainBundle] loadNibNamed:@"DataTableViewCell" owner:nil options:nil]; 

     for (UIView *view in views) { 
      if ([view isKindOfClass:[UITableViewCell class]]) { 

       cell = (DataTableViewCell*)view; 

      } 
     } 
    } 

    return cell; 
} 

тогда, когда я использую: метод

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

, чтобы получить выбранную ячейку, я называю этот метод, чтобы расширить ячейку:

- (void)expandCellAtIndex:(int)index { 

    NSMutableArray *path = [NSMutableArray new]; 
    NSArray *currentCells = [subCellItems objectAtIndex:index]; 
    int insertPos = index + 1; 
    for (int i = 0; i < [currentCells count]; i++) { 
     [path addObject:[NSIndexPath indexPathForRow:insertPos++ inSection:0]]; 
    } 

    [self.tableView insertRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationFade]; 
    [self.tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:index inSection:0] atScrollPosition:UITableViewScrollPositionTop animated:YES]; 

} 

Теперь проблема в том, что, так как я не сделал этого раньше, я застрял на логику о том, как изменить ячейку я хочу показать в развернутом, что это потому, что метод:

[self.tableView insertRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationFade]; 

ищет правильный путь и вставить ячейку с одной и той же ячейки XIb файл в качестве одного я загружен с моими данными в начале

как я могу установить другую ячейку (с другой XIb , и разные данные), чтобы показать вместо того, что было раньше?

в основном я эта таблица работает, но в расширяющейся камере я вижу копию ячейки прикосновение

ответ

0

Вы можете сделать это следующим образом:

В .h:

@interface TSViewController : UIViewController 
{ 
    NSMutableArray* subCellIndexPaths; 
} 

В DataTableViewSubCell.xib создайте одну «ячейку просмотра таблицы» (другие виды, которые нужно удалить). Измените класс для «Custom Class» на DataTableViewSubCell. Повторите его для второй ячейки.

В .m:

- (UITableViewCell*) tableView: (UITableView*) tableView 
     cellForRowAtIndexPath: (NSIndexPath*) indexPath 
{ 
    static NSString *CellIdentifier = @"Cell"; 

    DataTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

    if (cell == nil) 
    { 
     if ([subCellIndexPaths containsObject: indexPath]) 
     { 
      NSArray* nib = [[NSBundle mainBundle] loadNibNamed: @"DataTableViewSuperCell" 
                 owner: nil 
                 options: nil]; 

      cell = [nib objectAtIndex: 0]; 
     } 
     else 
     { 
      NSArray* nib = [[NSBundle mainBundle] loadNibNamed: @"DataTableViewSubCell" 
                 owner: nil 
                 options: nil]; 

      cell = [nib objectAtIndex: 0]; 
     } 
    } 

    return cell; 
} 

- (void) expandCellAtIndex: (int)index 
{ 
    NSMutableArray* indexPaths = [NSMutableArray new]; 
    NSArray* currentCells = [subCellItems objectAtIndex: index]; 

    int insertPos = index + 1; 

    for (int i = 0; i < [currentCells count]; i++) 
    { 
     NSIndexPath* indexPath = [NSIndexPath indexPathForRow: insertPos++ 
                inSection: 0]; 
     [indexPaths addObject: indexPath]; 
     [subCellIndexPaths addObject: indexPath]; 
    } 

    [self.tableView insertRowsAtIndexPaths: indexPaths 
          withRowAnimation: UITableViewRowAnimationFade]; 

    [self.tableView scrollToRowAtIndexPath: [NSIndexPath indexPathForRow: index 
                   inSection: 0] 
          atScrollPosition: UITableViewScrollPositionTop 
            animated: YES]; 

} 

И, конечно, вы должны создать subCellIndexPaths где-нибудь (в инициализации или viewDodLoad методов).

+0

Прежде всего спасибо за ваш ответ, я хотел бы спросить вас, как я могу подключить IBOutlets ячеек (которые имеют свои отдельные файлы xib и разные классы) в файл UIViewController (у которых есть свой собственный xib с UITableView внутри него), я всегда подключал IBOutlets в файлы .r (например DataTableViewCell.xib в DataTableViewCell.h) – Adarkuccio

+0

Я обновил свой ответ для xib без IBOutlet. – stosha

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