2012-01-10 2 views
0

Простите вопрос о нубе, все еще изучая.Добавление заголовков разделов в UITableView

У меня есть 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; 
} 

ответ

2

Методы в протоколе 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

Это замечательно, спасибо. Я реализовал это в своем коде, и я успешно реализовал заголовки. Однако, используя ваш код в качестве базы, разделы, похоже, повторяются. Например, в разделе 0 есть 3 строки, строка 1, строка 2, строка 3, раздел 1 имеет 4 строки, но данные отображаются как строка 1, строка 2, строка 3, строка 4, а не начинаются в строке 4 и идут строка 4, строка 5, строка 6, строка 7. Это то же самое для всех последующих разделов. Есть идеи? Надеюсь, это имеет смысл. – mattFllr

+0

В вашем 'cellForRowAtIndexPath:' в инструкции 'switch' на основе раздела вы добавляете 3 к индексу массива? Идея здесь заключается в том, что indexPath для первой ячейки во втором разделе (section = 1, row = 0), а вторая ячейка в этом разделе (section = 1, row = 1) и т. Д. Поэтому вам нужно добавьте смещение, чтобы получить правильный диапазон из вашего массива при рендеринге ячеек для второго раздела. – jonkroll

+0

Это та часть, где вы положили cell.textLabel.text = (NSString *) [массив objectAtIndex: row + 30] ;? Если так, я уверен, что у меня есть, хотя мне придется дважды проверить. На данный момент есть 7 разделов, чтобы я мог что-то подделать. – mattFllr

0

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

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

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

+0

Спасибо, получил этот бит. Как насчет реализации заголовков? Итак, if (section == 0) {return @ "Header"; ' blah blah, как определить, где начинается и заканчивается секция, если это имеет смысл. – mattFllr

+0

Есть несколько способов сделать это. Является ли ваш массив динамическим, или он жестко закодирован? Если он жестко закодирован, вы можете сделать так, чтобы у вас был один массив в каждом разделе и жестко закодировал заголовки для этих разделов. –

0

Если вы хотите заголовок рассмотреть вопрос об использовании 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

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

 Смежные вопросы

  • Нет связанных вопросов^_^