Подробнее
Во-первых, вам нужно реализовать метод 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 . В частности, раздел, озаглавленный «Заполнение табличного представления данными».