Iphone UITableView节标题问题

Iphone UITableView节标题问题,iphone,ios,tableview,Iphone,Ios,Tableview,全部, 我有一个分组的UITableView,可能总共有3个部分。可能有1、2或3个 我的问题是,对于每个部分,我使用不同的页眉和页脚视图。我通过检查部分来选择要显示的页眉/页脚 这显然不起作用,因为第0节并不总是表示“header”0显示的内容 例如: 标题0=正在进行的游戏。但是没有从数据库返回正在进行的游戏。只有“游戏结束”才存在。因此,第0节将是所有“游戏结束”。我不希望“游戏结束”使用“游戏进行中”标题 我找不到一种方法来检查节值,而不是数字 简单地说,我希望能够为节名3显示节头3,即

全部,

我有一个分组的UITableView,可能总共有3个部分。可能有1、2或3个

我的问题是,对于每个部分,我使用不同的页眉和页脚视图。我通过检查部分来选择要显示的页眉/页脚

这显然不起作用,因为第0节并不总是表示“header”0显示的内容

例如: 标题0=正在进行的游戏。但是没有从数据库返回正在进行的游戏。只有“游戏结束”才存在。因此,第0节将是所有“游戏结束”。我不希望“游戏结束”使用“游戏进行中”标题

我找不到一种方法来检查节值,而不是数字

简单地说,我希望能够为节名3显示节头3,即使节名3是节0

我知道这看起来很琐碎,可能很简单。。。但是我被卡住了。感谢您的帮助

谢谢

---代码---

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {


    return [[fetchedResultsController_ sections] count];

}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    id <NSFetchedResultsSectionInfo> sectionInfo = [[fetchedResultsController_ sections] objectAtIndex:section];


    return [sectionInfo numberOfObjects];
}


- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {


    if(section == 0)
    {
        return 50.0f;
    }
    else if (section == 1)
        return 50.0f;

    else
        return 50.0f;


}

- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {


    if(section == 0 )
    {
        return 50.0f;
    }
    else if (section == 1)
        return 5.0f;

    else
        return 80.0f;


}



- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {

    if(section == 0)
    {
        return headerView1;
    }
    else if (section == 1)
        return headerView2;

    else
        return headerView3;

}

- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section {

    if(section == 0)
    {
        return footerView1;
    }
    else if (section == 1)
        return footerView2;

    else
        return footerView3;

}

显然,通过检查节来决定显示哪个页眉/页脚是错误的,这是糟糕的MVC。对于您的问题的解决方案,最好看一些实际的代码,尽管我认为我可以提出一些一般性的建议: 您显示的节是从某些数据源(数组、字典或其他集合)中提取的。这是用于确定NumberOfSectionsTableView:delegate方法的返回值的同一个集合。如果尚未这样做,则应将这些数据实例合并到包含数据本身的某个对象中这是显示单元格/页眉/页脚元素以及实际数据值时通常需要的数据-在此对象中,添加额外的HeaderType枚举值,这样每个对象都知道它应该如何显示。这样,MVC就完美了:您的数据存储在一组自定义对象中,您的控制器知道如何按数据类型显示数据,当然,您的视图会根据控制器的指令正确显示数据。 下面是一个枚举示例,可以帮助您:

typedef enum {
 kHeaderTypeGameProgress,
 kHeaderTypeGameStats,
 kHeaderTypeGameDate
} HeaderType;

在viewForHeader或viewForFooter方法中,只需添加一个开关类型来检查数据的HeaderType,并相应地创建一个视图。希望我能帮忙,祝你好运

似乎在cellForRowAtIndexPath中,您必须已经有了一些逻辑来决定从哪个组显示数据,可能类似于:

 NSArray *group;
 int section = indexPath.section;
 if (![gamesInProgress count]) section++;
 switch (section) {
     case 0:
          group = gamesInProgress;
          break;
     case 1:
          group = finishedGames;
          break;
     // etc.
}

在viewForHeaderInSection中,编写类似的代码来设置NSString而不是NSArray。

请包含当前用于返回节标题的代码。谢谢。在我发布这个问题之前,我遇到了你的一个类似的帖子。我的数据源是一个使用核心数据的Sqlite数据库。我使用fetchedResultsController返回数据。并定义了“sectionKey”。我的问题是在执行页眉/页脚代码之前获取此sectionKey值。我一定错过了一些非常基本的东西。。。我需要做的就是计算这个sectionKey值。为什么不在加载tableView之前只预加载确定视图类型所需的数据呢?