如何?在TableView中,如果NSMutableArray为空,则显示其他Array

时间:2011-12-15 20:02:11

标签: iphone objective-c ios xcode cocoa-touch

在桌面视图中,我正在显示本周计划的NSMutableArray的本地足球比赛。如果没有匹配,我想显示一个单元格,上面写着:“本周没有匹配”。如果匹配的NSMutableArray为空,我想我必须调用另一个数组,或者可能是字典,但此时我不知道从哪里开始。有关如何实现这一目标的任何想法?

3 个答案:

答案 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;

}