Загрузка разделов таблицы при использовании заголовков - PullRequest
0 голосов
/ 20 мая 2010

Я не могу обернуть голову вокруг этого. Я гуглил и перегнал в течение нескольких часов, ища примеры, к которым я могу обратиться. У меня есть два массива.

Имя моего первого NSMutableArray - "showDates".

I have 3 objects in here.
Object 0: "Today, May 20th"
Object 1: "Tomorrow, May 21st"
Object 2: "Saturday, May 22nd"

Тогда у меня есть второй NSMutableArray с именем "showTimes" У меня там около 15 объектов со строками в каждом объекте. ( Надеюсь это имеет смысл? ) Каждый объект структурирован так:

       Object 0:
          showID @"98022"
          eventID @"833"
          showTime @"1:30pm"
          showDate @"Today, May 20th"
          auditorium @"9"
          venue @"2991"

       Object 1:
          showID @"98222"
          eventID @"813"
          showTime @"2:30pm"
          showDate @"Tomorrow, May 21st"
          auditorium @"9"
          venue @"2991"

Etc, etc, ....

У меня отлично работают заголовки в tableView, но я не могу понять, как добавить объекты в массив "showTimes" под правильным заголовком. Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

2 голосов
/ 20 мая 2010

В классе dataSource вашего табличного представления вам необходимо реализовать метод tableView: cellForRowAtIndexPath: для предоставления ячейки для каждой строки в таблице. Использование

[indexPath section]

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

1 голос
/ 21 мая 2010

Подробнее

Во-первых, вам нужно реализовать метод numberOfRowsInSection: в источнике данных вашего TableView. Этот метод принимает в качестве аргумента строку NSIndexPath (которая является целым числом). NSIndexPath, когда используется в TableViews, имеет свойства section и row. Все, что вам нужно сделать, это получить значение свойства section и вернуть количество строк, которые вы хотели бы видеть в этом разделе. Например:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
   switch(section)
   {
      //This would represent your first section, "Today..."
      case 0: //implement logic to find how many data objects need to be represented as rows for this section
         break;
      //second section, "Tomorrow"
      case 1: //logic
         break;
      //third section
      case 2:  //logic
         break;
   }
}

Теперь, когда вы достигли этого, пришло время реализовать cellForRowAtIndexPath:. В отличие от предыдущего метода, этот метод использует целый NSIndexPath в качестве аргумента, обычно называемый indexPath в документации. Просто найдите раздел пути, используя свойство доступа indexPath.section, и строку в разделе с indexPath.row.

Важное примечание

Сказав это, все это может быть немного проще, если вы переставите информацию, которая в настоящее время содержится в массиве ShowTimes. Если массив не отсортирован, то (например) логика в каждом случае, который я показал для numberOfRowsInSection:, потребует от вас пройти весь массив и проверить каждый элемент, чтобы определить, принадлежит ли он к запрашиваемому разделу таблицы. Я бы порекомендовал разбить массив ShowTimes на три отдельных массива (по одному для каждого раздела) перед отображением таблицы, так что все, что вам нужно, это простой count вызов соответствующего массива в каждом случае. Реализация для cellForRowAtIndexPath: также будет упрощена.

Резюме

Думайте об этом так. Такие методы, как numberOfSectionsInTableView: и numberOfRowsInSection:, определяют расположение строк в вашей таблице задолго до того, как будет загружена даже одна ячейка - еще до того, как ваши данные будут учтены. Поскольку каждая ячейка будет отображаться, cellForRowAtIndexPath: решает, что будет содержать эта ячейка, на основе NSIndexPath ячейки или, более конкретно, на основе свойств section и row этого IndexPath.
Короче говоря, единственное, что связывает ячейку с ее содержимым, это IndexPath, и cellForRowAtIndexPath: решает, как создается ссылка.

Для дальнейшего чтения, посмотрите на эту страницу из Руководство по программированию TableView . В частности, раздел, озаглавленный «Заполнение табличного представления данными».

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