当前位置: 首页 > 知识库问答 >
问题:

如何使两个自定义UICollectionViewCell类共享相同的变量名

祁霖
2023-03-14

我有两个自定义UICollectionViewCell类,但是,我想在同一作用域中创建一个同名的变量,因为CellForItematIndexPath方法中的所有属性和所有代码对于这两个自定义单元格都是相同的。

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{


CustomCell1/CustomCell2 *cell;

if (condition) {
    cell = (CustomCell1 *)[collectionView dequeueReusableCellWithReuseIdentifier:kCustomCell1Identifier forIndexPath:indexPath];
} else {
    cell = (CustomCell2 *)[collectionView dequeueReusableCellWithReuseIdentifier:kCustomCell2Identifier forIndexPath:indexPath];
}

    // Remaining code is same for both custom cells
    cell.property1 = value1;
    cell.property2 = value2;
    .
    .
    .
    .
    .
    //lot of code
    cell.property100 = value100;

return cell;
} 

条件(三元)运算符是否可以这样做?

共有1个答案

璩华辉
2023-03-14

可以创建基(父)collectionviewCell类

@interface BaseCollectionViewCell : UICollectionViewCell 
//Add the common methods(can add common IBOulet and IBAction) and implement them.
@end

现在,您可以创建新的集合视图单元格,该单元格派生自BaseCollectionViewCell为:

@interface ChildCell : BaseCollectionViewCell
//add methods which are specific to the ChildCell as the methods of    
//BaseCollectionViewCell is already available via inheritance.
@end

与创建另一个集合视图单元格的方式相同:

@interface ChildCell2 : BaseCollectionViewCell
//add methods which are specific to the ChildCell2 as the methods of    
//BaseCollectionViewCell is already available via inheritance.
@end

现在ChildCell和ChildCell2获得BaseCollectionViewCell的所有方法。

将集合视图单元格与单独的重用标识符一起注册到这些类中。使用以下代码出列单元格。

 BaseCollectionViewCell *cell;

  if (condition) {

  ChildCell *cell1 = (ChildCell *)[collectionView      
  dequeueReusableCellWithReuseIdentifier:kCustomCell1Identifier 
  forIndexPath:indexPath];
  //call cell1's specific properties if needed.
  cell = (BaseCollectionViewCell *) cell1;

  } else {

   ChildCell2 cell2 = (ChildCell2 *)[collectionView 
   dequeueReusableCellWithReuseIdentifier:kCustomCell2Identifier forIndexPath:indexPath];
  //call cell2's specific properties if needed.
  cell = (BaseCollectionViewCell *) cell2;

  }
//call common methods here.
 类似资料:
  • 问题内容: 如果我有两个CSS文件: 文件1: 档案2: 并将它们包含在页面中,哪一个优先?我猜是最后加载的那个吗?如果是这样,是否有办法确保最后加载哪个CSS文件? 问题答案: 在这种情况下,最后一个加载的(或如David指出的,更准确地 包括 最后一个)获胜。但是请注意,这是基于属性的,如果您加载具有不同属性的2个定义,则结果将是组合。如果属性同时出现在第一个属性和第二个属性中,则最后一个属性

  • 我有一个人[]有三个人(p1,p2,p3)。Person类有两个属性name和email。 我使用了以下代码。 但我不想这样用。我想使用两个组合框与相同的型号。我尝试使用DefaultComboBoxModel并重写getElementAt()方法,如下所示。 } 问题是如何使用相同的ComboBoxModel在一个JComboBox中添加Person[]的所有名称,并在另一个JComboBox中

  • 在 OpenResty 的体系中,可以通过共享内存的方式完成不同工作进程的数据共享,可以通过 Lua 模块方式完成单个进程内不同请求的数据共享。如何完成单个请求内不同阶段的数据共享呢?最典型的例子,估计就是在 log 阶段记录一些请求的特殊变量。 ngx.ctx 表就是为了解决这类问题而设计的。参考下面例子: location /test { rewrite_by_lua_block {

  • 你可以在怎么使用变量中所描述的方式来创建,初始化,保存及加载单一的变量.但是当创建复杂的模块时,通常你需要共享大量变量集并且如果你还想在同一个地方初始化这所有的变量,我们又该怎么做呢.本教程就是演示如何使用tf.variable_scope() 和tf.get_variable()两个方法来实现这一点. 问题 假设你为图片过滤器创建了一个简单的模块,和我们的卷积神经网络教程模块相似,但是这里包括两

  • 一般情况下,当一个传递给Spark操作(例如map和reduce)的函数在远程节点上面运行时,Spark操作实际上操作的是这个函数所用变量的一个独立副本。这些变量被复制到每台机器上,并且这些变量在远程机器上 的所有更新都不会传递回驱动程序。通常跨任务的读写变量是低效的,但是,Spark还是为两种常见的使用模式提供了两种有限的共享变量:广播变量(broadcast variable)和累加器(acc

  • Shared variables (共享变量)是为所有模板定义的变量。可以使用 setSharedVariable 方法向配置中添加共享变量: Configuration cfg = new Configuration(Configuration.VERSION_2_3_22); ... cfg.setSharedVariable("warp", new WarpDirective()); cfg