在桌面视图中,我正在显示本周计划的NSMutableArray的本地足球比赛。如果没有匹配,我想显示一个单元格,上面写着:“本周没有匹配”。如果匹配的NSMutableArray为空,我想我必须调用另一个数组,或者可能是字典,但此时我不知道从哪里开始。有关如何实现这一目标的任何想法?
答案 0 :(得分:2)
首先,测试是否有匹配。如果有,请告诉tableView有与匹配一样多的行。如果没有,则返回1行。
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [matches count] ? [matches count] : 1;
}
然后,在创建单元格时,检查是否有匹配项,如果有,则显示相应的匹配项,如果没有,则显示“No Matches”。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
// boiler plate cellForRowAtIndexPath stuff here...
NSUInteger row = [indexPath row];
cell.textLabel.text = [matches count] ? [matches objectAtIndex:row] : @"No Matches";
return cell;
}
答案 1 :(得分:1)
给出的答案都很好,但是根据您对表的处理方式,您可能会在以后遇到一些问题 - 例如,如果您插入或删除表中的第一行(即添加第一个匹配项,或者删除最后一个匹配项,然后您将引发异常,因为该部分中的行数未更改,但您已添加或删除了一行。
您还可能需要阻止特殊行的删除等。这一切都有点混乱。
如果这是一个问题,您可能会发现在页眉或页脚视图中显示“无匹配”消息会更好,您可以适当地切换可见性。
答案 2 :(得分:0)
在您的表的tableView:numberOfRowsInSection:
委托方法中,您需要知道是否有任何匹配。如果没有,请返回1.这将保证您的表格中有一行。
然后,在tableView:cellForRowAtIndexPath:
委托方法中,如果没有匹配项,则返回文本“No Matches”的单元格,否则,根据匹配返回单元格:
- (NSInteger)tableView:(UITableView *)table numberOfRowsInSection:(NSInteger)section {
BOOL hasMatches = [myMatchesArray count] > 0;
return hasMatches ? [myMatchesArray count] : 1;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
BOOL hasMatches = [myMatchesArray count] > 0;
UITableViewCell *cell = .....
if (hasMatches) {
MyMatchObject *match = (MyMatchObject *)[myMatchesArray objectAtIndex:indexPath.row];
[cell.textLabel setText:match.matchText];
}else{
[cell.textLabel setText:@"No Matches"];
}
return cell;
}