Сгруппированный табличный вид Obj-C - PullRequest
0 голосов
/ 04 марта 2011

Я следовал учебному пособию здесь и задавался вопросом, как сделать таблицу сгруппированной.

например:

group1 содержит Subview One и Subview Two

group2 содержит Subview Three

Я переключил тип в конструкторе интерфейсов, но это показывает только одну группу.

Спасибо, Адам

Sidenote * Я совершенно новый в цели c, отсюда и учебник.

EDIT

Я подумал, что было бы полезно добавить код

#import "RootViewController.h"
#import "SubViewOneController.h"
#import "SubViewTwoController.h"


@implementation RootViewController


#pragma mark -
#pragma mark View lifecycle

-(void)awakeFromNib {
    views = [[NSMutableArray alloc] init];

SubViewOneController *subViewOneController = [[SubViewOneController alloc] init];
SubViewTwoController *subViewTwoController = [[SubViewTwoController alloc] init];

//Subview 1

    subViewOneController.title = @"Subview One";
    [views addObject:[NSDictionary dictionaryWithObjectsAndKeys:
                      @"Subview One",           @"title",
                      subViewOneController,     @"controller",
                      nil]];
    [subViewOneController release];

//Subview 2

subViewOneController = [[SubViewOneController alloc] init];
subViewOneController.title = @"Subview Two";
[views addObject:[NSDictionary dictionaryWithObjectsAndKeys:
                  @"Subview Two",           @"title",
                  subViewTwoController,     @"controller",
                  nil]];
[subViewOneController release];

//Subview 3

subViewOneController = [[SubViewOneController alloc] init];
subViewOneController.title = @"Subview Three";
[views addObject:[NSDictionary dictionaryWithObjectsAndKeys:
                  @"Subview Three",         @"title",
                  subViewOneController,     @"controller",
                  nil]];
[subViewOneController release];

UIBarButtonItem *temporaryBarButtonItem = [[UIBarButtonItem alloc] init];
temporaryBarButtonItem.title = @"Back";
self.navigationItem.backBarButtonItem = temporaryBarButtonItem;
[temporaryBarButtonItem release];

self.title = @"Basic Navigation";
}

- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
}

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

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return [views count];
}
//
//I think it goes somewhere in here
//
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

static NSString *CellIdentifier = @"Cell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewStyleGrouped reuseIdentifier:CellIdentifier];
}

cell.text = [[views objectAtIndex:indexPath.row] objectForKey:@"title"];


return cell;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
UIViewController *targetViewController = [[views objectAtIndex:indexPath.row] objectForKey:@"controller"];
[[self navigationController] pushViewController:targetViewController animated:YES];
}

- (void)dealloc {
[views dealloc];
[super dealloc];
}


@end

Ответы [ 3 ]

1 голос
/ 04 марта 2011

Все это контролируется вашим UITableViewDataSource. Метод numberOfSectionsInTableView: контролирует количество групп, а tableView:numberOfRowsInSection: - количество строк в каждой группе.

Ваш tableView:cellForRowAtIndexPath: в UITableViewDelegate получает объект NSIndexPath; indexPath.section говорит вам, какая группа и indexPath.row говорит вам, какая строка в группе. Ячейка, которую вы возвращаете, действительно не знает, в какую группу она входит или в какой строке она находится, все это контролируется тем фактом, что вы возвращаете ее для определенного indexPath, когда вызывается tableView:cellForRowAtIndexPath:.

1 голос
/ 04 марта 2011

Хорошо, так что вы правы, это входит в ваш cellForRowAtIndexPath: вы будете искать что-то вроде:

if ([indexPath section] == 0) { // материал для первого раздела. }

if ([indexPath section] == 1) { // материал для второго раздела. }

Вам также необходимо разобраться, как вы настраиваете ячейку из вашего массива. Номера строк разделов начинаются с 0. То же самое с didSelectRowAtIndexPath: Если вы не имеете дело с разделом, в котором вы устанавливаете cell.text, вы получите

Subview One

Subview Two

Subview One

Я рекомендую получить iPhone Programming (The Big Nerd Ranch Guide)

0 голосов
/ 04 марта 2011

В Интерфейсном Разработчике выберите ваш объект UITableView и выберите Сгруппированный в качестве стиля.

Если вы создаете его программно, используйте initWithStyle: UITableViewStyleGrouped.

EDIT:

if (section == 0) { /* your first section */ }

if (section == 1) { /* your second section */ }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...