我需要类似于“设置”应用中的Twitter帐户的UITableView分组代码:

也就是说,一种形式或菜单,其中的某些部分具有一组预先已知的静态单元格,而另一些部分则必须是动态的,并允许以与“添加帐户”相同的方式插入其他行。我正在管理UITableView文件中的.xib。对于静态单元格,我分离了.xib文件,可以在 View Controller 的cellForRowAtIndexPath:方法中加载这些文件。

我应该如何处理这种 table ?我找不到任何示例代码。
cellForRowAtIndexPath:方法应如何显示?我是否需要为静态单元格保留strong属性?在表 View 所在的同一个.xib文件中直接设计每个静态单元并为它们设置导出会更好吗? (尽管这不允许重复使用我的自定义单元格设计...)

我需要一些准则来实现此目标并正确管理单元和内存。提前致谢

最佳答案

如果您只返回单元格而不在cellForRowAtIndexPath中添加任何内容,则动态原型(prototype)单元格的行为就可以像静态单元格一样,因此,通过使用动态原型(prototype),可以同时具有“静态类”单元格和动态单元格(行数和内容是可变的) 。

在下面的示例中,我从IB中的表 View Controller (具有分组表 View )开始,然后将动态原型(prototype)单元格的数量更改为3。我将第一个单元格的大小调整为80,并添加了UIImageView和两个标签。中间的单元格是基本样式单元格,最后一个是具有单个居中标签的另一个自定义单元格。我给他们每个人自己的标识符。这是IB中的样子:

然后在代码中,我这样做:

- (void)viewDidLoad {
    [super viewDidLoad];
    self.theData = @[@"One",@"Two",@"Three",@"Four",@"Five"];
    [self.tableView reloadData];
}

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

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    if (section == 1)
        return self.theData.count;
    return 1;
}

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    if (indexPath.section == 0)
        return 80;
    return 44;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell;

    if (indexPath.section == 0) {
        cell = [tableView dequeueReusableCellWithIdentifier:@"TitleCell" forIndexPath:indexPath];

    }else if (indexPath.section == 1) {
        cell = [tableView dequeueReusableCellWithIdentifier:@"DataCell" forIndexPath:indexPath];
        cell.textLabel.text = self.theData[indexPath.row];

    }else if (indexPath.section == 2) {
        cell = [tableView dequeueReusableCellWithIdentifier:@"ButtonCell" forIndexPath:indexPath];
    }

    return cell;
}

如您所见,对于“静态类”单元格,我只返回具有正确标识符的单元格,就可以准确地得到在IB中设置的内容。运行时的结果看起来像您发布的图像,分为三个部分。

10-05 22:35
查看更多