将节标题添加到UITableView

时间:2012-01-10 21:28:12

标签: objective-c ios cocoa-touch uitableview

原谅noob问题,仍在学习。

我有一个UITableView,带有一个数据阵列(大约50个)。我正在寻找实现节标题,但我无法理解它。我能找到的所有信息似乎差别很大(似乎有鬃毛可以实现的方式吗?)而我似乎无法将它们拼凑在一起!

一如既往,我无法弄清楚Apple的文档,但我认为这归结于我的经验不足。

所以有几个问题:

我知道我需要说明需要多少个部分,使用单个数组,这将是最好的方法吗?

我可以使用单个阵列吗?或者我是否需要将其分解为多个阵列,每个阵列都有自己的部分?

提前致谢。

jonkroll的cellForRowAtIndexPath代码

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;
}

4 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:0)

您的应用程序可能有一个UITableViewDataSourceUITableViewDelegate(这是您返回数组元素并配置节数等的地方)。在那个班级(或那些班级,如果他们是分开的),你可以采取两种方法,取决于你想做什么。

如果您只想拥有默认外观的标题,请实施tableView:titleForHeaderInSection:以返回每个部分所需的标题。

如果您想要自定义视图,请实施tableView:viewForHeaderInSection:以及tableView:heightForHeaderInSection:以返回自定义视图以及标题视图的高度。

答案 2 :(得分: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;

答案 3 :(得分:0)

你应该看一下Apple发布的iPhoneCoreDataRecipes示例。他们使用Tableview并以不同的方式显示数据。作为自己编程的新手,我不知道如何为您提供链接,但它位于数据管理下的iOS 5.0库中。