Как?В TableView, если NSMutableArray пуст, показать другой массив - PullRequest
1 голос
/ 16 декабря 2011

В табличном представлении я показываю местные футбольные матчи из NSMutableArray, которые запланированы на эту неделю. Если совпадений нет, я хочу отобразить ячейку, в которой будет что-то вроде «Нет совпадений на этой неделе». Я думаю, что мне нужно вызвать другой массив, или, возможно, словарь, если NSMutableArray совпадений пуст, но на данный момент я не знаю, с чего начать. Есть мысли о том, как этого добиться?

Ответы [ 3 ]

2 голосов
/ 16 декабря 2011

Сначала проверьте, есть ли совпадения. Если есть, скажите tableView, что строк столько, сколько совпадений. Если нет, верните 1 строку.

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [matches count] ? [matches count] : 1;
}

Затем, при создании вашей ячейки, проверьте, есть ли совпадения, если есть, показать соответствующий, если нет, показать "Нет совпадений".

- (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 голос
/ 16 декабря 2011

Оба приведенных ответа хороши, но в зависимости от того, что вы делаете с таблицей, вы можете столкнуться с некоторыми проблемами позже - например, если вы вставите или удалите первую строку в таблице (т.е. добавите первое совпадение или удаляя последнее совпадение), вы получите исключение, потому что количество строк в разделе не изменилось, но вы добавили или удалили строку.

Вам также может потребоваться предотвратить удаление и т. Д. Специальной строки. Все может стать немного грязным.

Если это проблема, может оказаться, что лучше отобразить сообщение «Нет совпадений» в представлении верхнего или нижнего колонтитула, которое вы соответствующим образом переключаете видимость.

0 голосов
/ 16 декабря 2011

в методе делегата tableView:numberOfRowsInSection: вашей таблицы вам нужно знать, есть ли совпадения. Если нет, верните 1. Это гарантирует вам одну строку в вашей таблице.

Затем в методе делегата tableView:cellForRowAtIndexPath:, если совпадений нет, вы возвращаете ячейку с текстом «Нет совпадений», в противном случае вы возвращаете ячейку в соответствии с совпадением:

- (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;

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...