2017-01-08 4 views
0

У меня есть UITableView в меню моего приложения. Эта таблица имеет в начале определенное количество ячеек (строк).Добавить различные типы ячеек в UITableView

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ 
    return 5; 
} 

Когда, например, клетка, имеющий indexPath.row = 1 щелкают, я должен добавить некоторые новые клетки (позволяет сказать, что 3 клетки) после этой ячейки (так в индексе 2, 3 и 4). И когда эта ячейка будет нажата во второй раз, я должен удалить добавленные ячейки. Проблема в том, что добавляемые ячейки имеют другой тип (другой класс). Я искал, как добавлять/удалять ячейки, и я обнаружил, что могу использовать insertRowsAtIndexPaths и удалить его. Но как я могу указать тип ячейки, а затем вернуть ее? Это целевая кнопка моей камеры:

[cell.showDetail addTarget:self action:@selector(btnSowDetailClicked) forControlEvents:UIControlEventTouchUpInside]; 

Я не знаю, что ставить в селекторе делать то, что я описываю:

-(void) btnSowDetailClicked { 
    // ???? 
} 

И как я могу установить numberOfRowsInSection в селектор?

ответ

-1

можно инициализировать в mutablearray чтобы хранить ваши клетки, независимо от того, сколько типа вашей клетки, когда вам нужно добавить ячейку, инициализации и сохранить его в массив.

в методе numberOfRows, просто return array.count;

в методе cellforrowatindexpath, получить ячейку из вашего массива, а затем вернуться в клетку.

0

Есть несколько вещей, которые вы должны следить, если вы еще не -

  1. состояние кнопки
  2. источник данных для класса клетки вернуться
  3. количество клеток

Одно предложение для управления NSMutableArray из NSStrings (который повторно чтобы класс ячейки возвращался)

В действии кнопки выполните следующие действия: NSStrings представляют класс ячеек для определенного индекса (например, @ "UITableViewCell" или @ "MyCustomCell" и т.д.) -

-(void) btnSowDetailClicked { 
    // Toggle button state - prob better to persist in property BOOL cellButtonState 
    cellButtonState = !cellButtonState; 
    // update data source(s) accordingly 
    if (cellButton.selected) { 
      // add NSStrings to data source array 
      // create array of NSIndexPaths to pass to table view 
      // update UITableView with - (void)insertRowsAtIndexPaths:withRowAnimation: 
    } 
    else { 
      // remove NSStrings from data source array 
      // create array of NSIndexPaths to pass to table view 
      // update UITableView with - deleteRowsAtIndexPaths:withRowAnimation: 
    } 
} 

Как указано в документации о вышеуказанных UITableView методов -

UITableView называет соответствующие делегата и исходные данные методы немедленно потом, чтобы получить ячейки и другое содержимое для видимых клеток.

Таким образом, источник данных может возвращать [число dataSourceArray] для числа строк. Чтобы получить правильный класс для того, где вы возвращаетесь в клетку, в cellForRowAtIndexPath захватить NSString объекта из исходного массива данных в indexPath.строка и использовать NSClassFromString, чтобы получить класс для ячейки!

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