2012-01-10 99 views
0

原谅noob问题,仍在学习。将节头添加到UITableView

我有对数据的单个阵列(约50)一个UITableView。我正在寻找实施部分标题,但我无法绕过它。我能找到的所有信息似乎都差异很大(似乎有什么可以实施的鬃毛方式?),我似乎无法将它们拼凑在一起!

与以往一样,我不能做出来苹果文档,但我认为这是到我的经验不足。

那么几个问题:

我明白我需要国家有多少部分需要,与单个阵列,将是最好的方法是什么?

我可以使用单个数组吗?或者我需要将它分解成众多数组,每个数组都有自己的部分?

在此先感谢。

代码为的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 2012-01-11 21:40:14

+0

在你的'cellForRowAtIndexPath:'中,在基于该部分的'switch'语句中,是否将3添加到数组索引中?这里的想法是,第二部分中第一个单元格的indexPath是(section = 1,row = 0),该部分中的第二个单元格是(section = 1,row = 1)等等。当渲染第二部分的单元格时,添加一个偏移量以从数组中获取正确的范围。 – jonkroll 2012-01-11 22:23:10

+0

是你放置的部分cell.textLabel.text =(NSString *)[array objectAtIndex:row + 30];?如果是这样,我确信我有,但我必须仔细检查。我现在有7个部分可能会欺骗一些东西。 – mattFllr 2012-01-11 22:59:01

0

您的应用程序可能有一个UITableViewDataSourceUITableViewDelegate(这是你返回数组中的元素和配置部分的数量,等等)。在那个班级里(或者那些班级,如果他们是分开的),根据你想做什么,你可以采取两种方法。

如果您只想要使用默认外观的标题,请执行tableView:titleForHeaderInSection:以返回每个部分所需的标题。

如果你想有一个自定义视图,实现tableView:viewForHeaderInSection:以及tableView:heightForHeaderInSection:用的标题视图的高度一起返回自定义视图。

+0

谢谢,明白了。怎么实现头文件?所以'if(section == 0){return @“Header”;'等等,如何确定该部分的开始和结束位置,如果有意义的话。 – mattFllr 2012-01-10 22:05:07

+0

有几种方法可以做到这一点。你的数组是动态的还是硬编码的?如果它是硬编码的,你可以做到这一点,所以你每个部分有一个数组,并将标题硬编码到这些部分。 – 2012-01-10 22:17:21

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例如,苹果推出。他们使用Tableview并以不同的方式显示数据。作为编程新手,我不知道如何为您提供链接,但它位于数据管理下的iOS 5.0库中。