这是交易:我有一个UITableView有2个部分,我想在第一部分为空时显示“无数据”单元格,这样2个部分的标题不会粘在一起(因为它看起来很奇怪)
效果很好(尽管我最初无法使其工作,see this thread)。我正在使用viewForFooterInSection:
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
if(section == 0)
{
if([firstSectionArray count] == 0)
return 40;
else
return 0;
}
return 0;
}
- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section{
if(section == 0)
{
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(200, 10, 50, 44)];
label.backgroundColor = [UIColor clearColor];
label.textColor = [UIColor colorWithWhite:0.6 alpha:1.0];
label.textAlignment = UITextAlignmentCenter;
label.lineBreakMode = UILineBreakModeWordWrap;
label.numberOfLines = 0;
label.text = @"No row";
return [label autorelease];
}
return nil;
}
但是当我显示部分页脚视图时,背景颜色变为纯白色。见图:
alt text http://img683.yfrog.com/img683/9480/uitableviewproblem.png
当背景充满空单元格时,我更喜欢它。有谁知道怎么做?感谢
答案 0 :(得分:2)
当没有页脚时,背景将填充空单元格。因此,不要实现viewForFooterInSection
(或titleForFooterInSection
)方法,您将获得“空单元格”效果。
我建议您返回一个单元格,表示没有要显示的条目,如下所示:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
if (matches.count>0) {
// Do your usual thing here
} else {
static NSString *cellId = @"noDataCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellId];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellId] autorelease];
cell.textLabel.textAlignment = UITextAlignmentCenter;
cell.textLabel.textColor = [UIColor grayColor];
}
cell.textLabel.text = @"Aucun match";
return cell;
}
}
当然,您必须告诉UIKit您的部分中至少有一个单元格...我已经添加了isDeletingRow
案例,这似乎给您带来麻烦(在评论中)。
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
if (section==0) return matches.count>0 ? matches.count : (isDeletingRow ? 0 : 1);
// Set 'isDeletingRow' to YES when a delete is being committed to the table, in that case we let UIKit know that we indeed took care of the delete...
// And cover the other sections too...
}
当您提交修改时,您需要为isDeletingRow
设置numberOfRowsInSection
以返回令人满意的值...
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
if (editingStyle == UITableViewCellEditingStyleDelete) {
isDeletingRow = YES;
// Your current code when a row is deleted here...
isDeletingRow = NO;
if (matches.count==0) [self.tableView performSelector:@selector(reloadData) withObject:nil afterDelay:0.5];
}
}