Поскольку на самом деле никто не дал реального ответа на эту проблему (используя статические и прототипные ячейки в одном и том же табличном представлении), я решил, что я буду вмешиваться.
Это можно сделать!
Создайте свои статические ячейки, как считаете нужным.
Для разделов, которым нужна динамическая ячейка, если вы НЕ используете стандартный тип UITableViewCell, вам нужно создать свой собственный в отдельном Nib, в противном случае вы можете использовать стандартные.
Затем реализуйте следующие делегаты. В основном для каждого из этих делегатов, для статического материала, который мы хотим назвать super, для динамического мы возвращаем наши значения.
Во-первых, если вам нужно выборочно показывать свой динамический раздел, вам нужно реализовать numberOfSectionsInTableView (в противном случае вы можете оставить этот делегат вне):
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
int staticSections = 1;
int dynamicSections = 1;
if (SOME_BOOLEAN) {
return staticSections + dynamicSections;
} else {
return staticSections;
}
}
Затем вам нужно реализовать numberOfRowsInSection:
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
if (section == 1) {
return A_COUNT;
} else {
return [super tableView:tableView numberOfRowsInSection:section];
}
}
Затем вам нужно реализовать heightForRowAtIndexPath:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
if (indexPath.section == 1) {
return 44.0f;
} else {
return [super tableView:tableView heightForRowAtIndexPath:indexPath];
}
}
Тогда отступ inLevelForRowAtIndexPath:
- (NSInteger)tableView:(UITableView *)tableView indentationLevelForRowAtIndexPath:(NSIndexPath *)indexPath
{
if (indexPath.section == 1) {
return 1; // or manually set in IB (Storyboard)
} else {
return [super tableView:tableView indentationLevelForRowAtIndexPath:indexPath]; // or 0
}
}
Наконец, cellForRowAtIndexPath:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
if (indexPath.section == 1) {
SomeObject *obj = self.someArray[indexPath.row];
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"DynamicCell" forIndexPath:indexPath];
cell.textLabel.text = obj.textValue;
return cell;
} else {
return [super tableView:tableView cellForRowAtIndexPath:indexPath];
}
}