所有
我有一个分组的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;
}
答案 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。