UITableView Section Header问题

时间:2011-10-25 18:07:58

标签: iphone ios tableview

所有

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

我的问题是,对于每个部分,我使用不同的标题&页脚视图。我通过查看#。

部分来选择要显示的页眉/页脚

这显然不起作用,因为第0部分并不总是表示'标题'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;

}

2 个答案:

答案 0 :(得分:0)

显然,通过检查#节来决定显示哪个页眉/页脚是错误的(这是错误的MVC)。对于你的问题的解决方案,最好看一些实际的代码,虽然我认为我可以建议一般的东西:
您显示的部分取自某些数据源 - 数组,字典或其他一些集合(这与您用于确定numberOfSectionsInTableView:委托方法的返回值的集合相同。你还没有这样做,你应该把这些数据实例合并到一个包含数据本身的对象中(这是你通常需要的数据,用于显示单元格/页眉/页脚元素以及实际数据值) - 在此对象中,添加一个额外的&#34; HeaderType&#34;枚举值,以便每个对象&#34;知道它应该如何显示。
这样你的MVC就是完美的:你将您的数据存储在一组自定义对象中,您的控制器知道如何按类型显示数据,当然您的视图会根据控制器的指令正确显示数据。 以下是可能有用的枚举示例:

typedef enum {
 kHeaderTypeGameProgress,
 kHeaderTypeGameStats,
 kHeaderTypeGameDate
} HeaderType;

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

答案 1 :(得分:0)

似乎在你的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。