我在管理应用的用户界面时遇到问题。该应用程序使用UITableView,具有多个原型单元格。 一切顺利,我有:
TypeACell.h + m files
TypeBCell.h + m files
TypeBCell.h + m files
etc.
我在Storyboard的UITableView中创建了原型单元格,其中有6个,每个都连接到特定类型的单元格。
事情是,每个自定义单元格中至少有4个元素可以在每个单元格中重复使用。 我们假设每个自定义单元格中只有2个元素不同。
为了论证,让我们想象细胞看起来像这样:
TypeACell
row1
row2
rowCustomA1
rowCustomA2
TypeBCell
row1
row2
rowCustomB1
rowCustomB2
etc.
然后在cellForRowAtIndexPath中我有类似的东西:
if(array[i] == TypeA){
TypeACell *cell = [tblView dequeueReusableCellWithIdentifier:typeAIdentifier];
set row1,row2, rowCustomA1, rowCustomA2;
display TypeACell
}
else if(array[i] == TypeB){
TypeBCell *cell = [tblView dequeueReusableCellWithIdentifier:typeBIdentifier];
set row1,row2, rowCustomB1, rowCustomB2;
display TypeBCell
}
事实是,使用这种实现,我必须修改12个位置才能进行更改,这对所有单元格来说都很常见。我正在寻找一种方法来修改我的实现。我一直想知道是否存在某些Objective-C特定方法可以帮助我处理这种废话。能否请您提供您的经验和建议?
编辑: 将细胞初始化添加到每个"如果"。现在,这只是我在基于继承的实现中无法解决的问题。
答案 0 :(得分:1)
这是您可以从继承中受益的地方:使用所有单元格类型共有的元素创建基类,然后将单个单元格类型作为其子类,如下所示:
@interface CommonCell : UITableViewCell
... // Common properties
@end
@interface TypeACell : CommonCell
... // Properties specific to A
@end
@interface TypeBCell : CommonCell
... // Properties specific to B
@end
@interface TypeCCell : CommonCell
... // Properties specific to C
@end
现在可以按如下方式更改循环:
for(iteration over array){
CommonCell *cell = ...
... // set common elements
set row1, row2
if(array[i] == TypeA){
set rowCustomA1, rowCustomA2;
}
else if(array[i] == TypeB){
set rowCustomB1, rowCustomB2;
}
...
display cell
}
答案 1 :(得分:1)
我不明白为什么你需要超过1个UITableViewCell子类。
-tableView:cellForRowAtIndexPath:
中的不同类型。示例:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
int cellType = array[indexPath.row];
NSString *cellID = cellType == TypeA ? typeAIdentifier : typeBIdentifier;
MyCell *cell = [tableView dequeueReusableCellWithIdentifier:cellID];
cell.row1 = …
cell.row2 = …
cell.row3 = cellType == TypeA ? … : …;
cell.row4 = cellType == TypeA ? … : …;
return cell;
}