2014-10-14 2 views
0

Я пытался создать представление таблицы со статическими и динамическими ячейками прототипа.Микс статических и динамических ячеек таблицы iOS

Итак, чего я хочу достичь, как это:

static 
static 
static 
static 
dynamic 
... 

Это сообщение на Stackoverflow, UITableView Mix of Static and Dynamic Cells?, был отчасти полезным, но он не может охватить всю мою проблему.

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

Это возможно?

Заранее спасибо.

EDIT: подходы я принял до сих пор

  1. Создать представление таблицы с только статические клетки, а затем добавить новый вид таблицы внутри исходной. Однако этот подход не выглядит профессиональным, и более того, когда я добавил источник данных и делегировал его в это новое представление таблицы, исходное представление таблицы было перемещено вниз.

  2. Создайте два вида таблиц для статических и динамических ячеек, а затем включите их в один вид. Это, я думаю, правдоподобный способ, но поскольку я новичок-разработчик, не смог выяснить, как решить, «статические представления таблицы должны быть встроены в контроллер табличного представления».

ответ

5

Вы можете подкласса UITableViewController и переопределить методы dataSource и делегата, чтобы добиться этого.

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

Например, использовать IB, чтобы определить UITableViewController с статическим содержимым в обычном порядке, но затем подкласс следующим образом, чтобы добавить один дополнительный раздел с динамическим содержимым:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
{ 
    return [super numberOfSectionsInTableView:tableView] + 1; 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    if(section < [super numberOfSectionsInTableView:tableView]) { 
     return [super tableView: tableView numberOfRowsInSection:section]; 
    } 
    else { 
     return self.numberOfRowsInMyDynamicSection; 
    } 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if(indexPath.section < [super numberOfSectionsInTableView:tableView]) { 
     return [super tableVIew: tableView cellForRowAtIndexPath: indexPath]; 
    } 
    else { 
     // do your own dynamic cell management; 
    } 
} 

//etc. for the other dataSource and delegate methods 

Я использовал эту технику создайте подкласс UITableViewController, который позволяет показывать/скрывать статически определенные ячейки во время выполнения.

Требуется немного усилий для реализации всех методов dateSource/delegate, но в итоге вы получите действительно удобный UITableViewController подкласс.

0

Я бы создал статические ячейки в качестве прототипов, но дал им каждый другой идентификатор cellReuseIdentifier. Затем в вашем cellForRowAtIndexPath удалите с помощью правильного cellReuseIdentifier для строки. Для строк с динамическими данными смещение индекса на 4 для доступа к правильным данным.

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