我按照教程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
答案 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
答案 2 :(得分:0)
在Interface Builder中,选择您的UITableView对象,然后选择Grouped作为样式。
如果您是以编程方式创建它,请使用initWithStyle:
UITableViewStyleGrouped
。
修改强>
if (section == 0) { /* your first section */ }
if (section == 1) { /* your second section */ }