分组表视图Obj-C

时间:2011-03-04 01:09:11

标签: iphone objective-c uitableview

我按照教程here进行操作,并想知道如何使表格显示为分组。

例如:

group1包含Subview One和Subview Two

group2包含Subview Three

我在界面构建器中切换了类型,但只显示了一个组。

谢谢, 亚当

Sidenote *我在目标c上是一个全新的,因此是教程。

修改

我认为提出这段代码可能会有所帮助

#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 个答案:

答案 0 :(得分:1)

这完全由您的UITableViewDataSource控制。 numberOfSectionsInTableView:方法控制有多少组,tableView:numberOfRowsInSection:控制每组中的行数。

UITableViewDelegate上的tableView:cellForRowAtIndexPath:获取NSIndexPath对象; indexPath.section告诉您哪个组和indexPath.row告诉您组中的哪一行。你返回的单元格实际上不知道它所在的组或组中的哪一行,它都是由于在调用tableView:cellForRowAtIndexPath:时为特定的indexPath返回它所控制的事实。

答案 1 :(得分:1)

好的,所以你是对的,它会进入你的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)

答案 2 :(得分:0)

在Interface Builder中,选择您的UITableView对象,然后选择Grouped作为样式。

如果您是以编程方式创建它,请使用initWithStyle: UITableViewStyleGrouped

修改

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

if (section == 1) { /* your second section */ }