Добавление заголовков разделов в UITableView - PullRequest
0 голосов
/ 11 января 2012

Простите за нубский вопрос, все еще учитесь.

У меня есть UITableView с одним массивом для данных (около 50). Я пытаюсь реализовать заголовки разделов, но не могу разобраться с этим. Кажется, что вся информация, которую я могу найти, сильно различается (кажется, что есть способы ее реализации?), И я не могу собрать все это вместе!

Как всегда, я не могу разобрать документы Apple, но думаю, что это связано с моей неопытностью.

Итак, несколько вопросов:

Я понимаю, что мне нужно указать, сколько разделов необходимо, с одним массивом, было бы лучшим способом?

Могу ли я использовать один массив? Или мне нужно разбить его на множество массивов, каждый со своим разделом?

Заранее спасибо.

Код для cellForRowAtIndexPath для jonkroll

switch (section) {
    case 0:
        cell.textLabel.text = (NSString*)[tableViewArray objectAtIndex:row];
        break;
    case 1:
        cell.textLabel.text = (NSString*)[tableViewArray objectAtIndex:row+3];
        break;
    case 2:
        cell.textLabel.text = (NSString*)[tableViewArray objectAtIndex:row+17];
        break;
}

Ответы [ 4 ]

2 голосов
/ 11 января 2012

Методы в протоколе UITableViewDataSource позволяют вам определить, как tableView отображает ваши данные.

Используйте numberOfSectionsInTableView:, чтобы сообщить вашей таблице, сколько разделов у нее будет.

ИспользоватьnumberOfRowsInSection:, чтобы сообщить вашей таблице, сколько строк будет в каждом разделе.

Используйте cellForRowAtIndexPath:, чтобы указать вашей таблице, что следует отображать в конкретной ячейке на основе indexPath (indexPath - это структура, которая идентифицирует конкретную ячейкуосновано на разделе и строке)

Итак, вы говорите, что у вас есть один массив, который вы хотите отобразить в более чем одном разделе.Это очень надуманный пример, но предположим, что вы хотите, чтобы строки 1-30 были в первом разделе, а строки 31-50 - во втором разделе.

Вы можете сделать следующее:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 2;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    switch (section) {
        case 0: return 30; break;
        case 1: return 20; break;
    }
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    int section = [indexPath section];
    int row = [indexPath row];

    NSString* CellIdentifier = @"MyCell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault 
                                                reuseIdentifier:CellIdentifier] autorelease];
    }

    switch (section) {
        case 0:
            cell.textLabel.text = (NSString*)[array objectAtIndex:row];
            break;
        case 1:
            cell.textLabel.text = (NSString*)[array objectAtIndex:row+30];
            break;
    }

    return cell;
}
0 голосов
/ 12 января 2012

Вы должны посмотреть на пример iPhoneCoreDataRecipes, который выдает Apple.Они используют Tableview и показывают данные разными способами.Будучи новичком в программировании, я не знаю, как предоставить вам ссылку, но она находится в библиотеке iOS 5.0 в разделе «Управление данными».

0 голосов
/ 11 января 2012

Если вы хотите использовать заголовок UITableViewCustomCell для заголовка, перетащите его в перо, где у вас настроен tableView. Объявите и соединитесь в InterfaceBuilder.

    IBOutlet UITableViewCell *cellOne;

    @property (nonatomic, retain) IBOutlet UITableViewCell *cellOne;

Затем вы можете использовать CellView для представления таблицы для вашего заголовка.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
if ([array count] == 0) return cellone;
0 голосов
/ 11 января 2012

Возможно, у вашего приложения есть UITableViewDataSource и UITableViewDelegate (здесь вы возвращаете элементы массива и настраиваете количество секций и т. Д.). Внутри этого класса (или тех классов, если они раздельные) есть два подхода, которые вы можете использовать в зависимости от того, что вы хотите сделать.

Если вы просто хотите иметь заголовок с видом по умолчанию , внедрите tableView:titleForHeaderInSection:, чтобы вернуть заголовок, который вы хотите для каждого раздела.

Если вы хотите пользовательский вид , внедрите tableView:viewForHeaderInSection:, а также tableView:heightForHeaderInSection:, чтобы вернуть пользовательский вид вместе с высотой заголовков.

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