У меня есть сгруппированный UITableView, где не все разделы могут быть отображены сразу, таблица управляется некоторыми данными, которые не может иметь каждая запись. Моя проблема состоит в том, что записи, которые не имеют определенных разделов, обнаруживаются как пробелы в таблице (см. изображение),
сопроводительный текст http://img220.imageshack.us/img220/5633/screenshot20100322at228.png
Нет никаких нижних колонтитулов/заголовков. Что-нибудь я отсутствовал?
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
// Return the number of rows in the section.
return [self getRowCount:section];
}
// Customize the appearance of table view cells.
- (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 = [NSString stringWithFormat:@"section: %d row: %d",indexPath.section,indexPath.row];
// Configure the cell...
return cell;
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
float height = 0.0;
if([self getRowCount:indexPath.section] != 0){
height = kDefaultRowHeight;
}
return height;
}
На скриншоте выше ваш метод numberOfSectionsInTableView:
возвращает значение 5? А затем ваш метод getRowCount:
(вызываемый из numberOfRowsInSection:
) возвращает значение 0 для тех "недостающих" секций (например, 1, 3 и 4)?
Если вам не нужны промежутки между ними, то вероятным решением будет объявить только то количество секций, которое вы хотите видеть. В вашем примере выше вы хотите вернуть только значение 3 из numberOfSectionsInTableView:
.
Я считаю, что с представлениями таблиц разделов каждый раздел должен существовать, и каждый раздел имеет буферное пространство для заголовка и нижний колонтитул, независимо от того, вставляете ли вы в них текст. Что вам нужно сделать, так это удалить неиспользуемые разделы. В вашем примере вы должны удалить разделы 1, 3 и 4. Это будет означать:
«раздел 0» равен indexPath.section == 0
«раздел 2» равен indexPath.section == 1
"section 5" - indexPath.section == 2
Если вы кодируете таким образом, верхние и нижние колонтитулы будут удалены, поскольку удалена нулевая ячейка.
Это, конечно, неправильное кодирование, но я просто хотел дать вам представление о богословии. Надеюсь, это поможет.