我有一个分组样式UITableView
,旨在显示固定数量的部分,每个部分又具有一组固定的单元格,类似于设置应用程序。单元格是自定义的并且在它们之间是不同的:其中一些有一个文本字段,另一个有一个开关,另一个有一个按钮。
我知道处理这种情况的两种方法:
1)通过 IBUITableViewCell
在同一个 nib 文件中包含控件和子控件。UITableView
然后,为每个单元格及其包含的控件(文本字段、开关和按钮)设置出口,并在需要时设置操作。这样,我的表格视图的cellForRowAtIndexPath:
方法如下所示:
- (UITableViewCell *)tableView:(UITableView *)tv cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = nil;
if (indexPath.section == 0) {
switch (indexPath.row) {
case 0: {
cell = firstCell;
break;
}
case 1: {
cell = secondCell;
break;
}
case 2: {
cell = thirdCell;
break;
}
case 3: {
cell = fourthCell;
break;
}
default:
break;
}
}
else if (indexPath.section == 1) {
switch (indexPath.row) {
case 0: {
cell = fifthCell;
break;
}
case 1: {
cell = sixthCell;
break;
}
default:
break;
}
}
return cell;
}
2)为我拥有的每个自定义单元格类型创建一个单独的 nib 文件和UITableViewCell
子类,然后像下面的代码片段一样加载它们。在这里,我为管理表视图的视图控制器中的每个单元格合成了属性:
- (UITableViewCell *)tableView:(UITableView *)tv cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = nil;
if (((indexPath.row == 0) && (indexPath.section == 0) && (firstCell == nil))
|| ((indexPath.row == 1) && (indexPath.section == 0) && (secondCell == nil))
|| ((indexPath.row == 0) && (indexPath.section == 1) && (fifthCell == nil))) {
NSArray* views = [[NSBundle mainBundle] loadNibNamed:@"TypeACell" owner:nil options:nil];
for (UIView *view in views) {
if ([view isKindOfClass:[UITableViewCell class]])
{
cell = (TypeACell *)view;
}
}
// Cell contained controls settings
}
else if (((indexPath.row == 2) && (indexPath.section == 0) && (thirdCell == nil))) {
NSArray* views = [[NSBundle mainBundle] loadNibNamed:@"TypeBCell" owner:nil options:nil];
for (UIView *view in views) {
if ([view isKindOfClass:[UITableViewCell class]])
{
cell = (TypeBCell *)view;
}
}
// Cell contained controls settings
}
else {
NSArray* views = [[NSBundle mainBundle] loadNibNamed:@"TypeCCell" owner:nil options:nil];
for (UIView *view in views) {
if ([view isKindOfClass:[UITableViewCell class]])
{
cell = (TypeCCell *)view;
}
}
// Cell contained controls settings
}
return cell;
}
最好的方法是什么?或者它可能是另一种不同的方式......每种方法都有哪些内存管理问题?在第一个中,当从 IB 为单元格及其控件设置插座时,单元格将自动设置为strong
属性,并将其控件设置为weak
属性。那是对的吗?如果遵循第二种方法,我是否也应该将单元格的属性设置为strong
?在这两种情况下,是否应该重复使用单元格,即使它是具有已知和固定单元格的表格?
我已经对这个问题做了一些研究,但我没有说清楚......
谢谢!