【问题标题】:How to link a UIView to a UICollectionViewCell?如何将 UIView 链接到 UICollectionViewCell?
【发布时间】:2016-06-16 05:39:30
【问题描述】:

这就是我希望应用程序运行的方式。一个人可以在 InterfaceBuilder 上设计他们想要的任何视图。然后在我的代码中,我在界面构建器上将该视图连接到 UICollectionViewCell。

这样,他们自定义创建的视图可以放置在许多 UICollectionViewCells 上。

所以基本上我要问的是:如何在以下条件下为 UICollectionView 设置单元格:

  1. 程序员将使用界面生成器为单元格创建视图(UIView)
  2. 程序员不会在界面生成器上使用 UICollectionView 或 UICollectionViewCell。
  3. 程序员只会在界面构建器上创建一个普通的 UIView,然后我的代码将通过代码将其连接到 UICollectionViewCell。

我正在尝试做的目标是创建一个程序员可以使用的自定义控件。程序员只需要设计 UIView,我的代码会处理其余的。

有什么方法可以从 IB 获取 UIView 并使用代码将其挂接到 UICollectionViewCell 中?我被卡住了。

目前我看到的函数是这个,但我不确定如何将视图链接到 UICollectionViewCell 类。

func registerClass(cellClass: AnyClass?, forCellWithReuseIdentifier identifier: String)

编辑 - 我正在考虑的另一个潜在解决方案是

  1. 使用 NSKeyedArchiver 制作用户拥有 InterfaceBuilder 的视图的副本。
  2. 保存该副本
  3. 使用 NSKeyedUnarchiver 创建副本

但我认为这种方式会很慢。大家有什么好的想法吗?

【问题讨论】:

  • 你可以使用 xib 的。您必须继承 UIView,然后必须将该视图加载为集合视图单元格。
  • 有趣的问题。我现在考虑的唯一方法是在可重用的 UICollectionViewCell 中创建、添加(使用自动布局)和删除你的 UIView。但这种解决方案存在性能缺陷。
  • @BharatModi 好的,我对此有 1 个问题。该解决方案不允许程序员将 UIView 添加到 IB 对吗?
  • 我说的是创建 UIView 的子类,它有单独的 xib,可以根据需要设计视图。
  • 您可以使用它从 nib 中获取您的 UIView 子类:MyViewClass* myViewObject = [[[NSBundle mainBundle] loadNibNamed:@"MyViewClassNib" owner:self options:nil] objectAtIndex:0] (不是在 Swift 中,但您可以理解)

标签: ios objective-c swift cocoa-touch uicollectionview


【解决方案1】:

正如你们中的一些评论者所提到的。

  1. 创建一个单独的 XIB 文件。
  2. 根据需要设计 XIB 文件的视图。
  3. 然后您可以像这样快速捕捉您的视图:
// Create the custom view 
var customView = NSBundle.mainBundle().loadNibNamed("nameOfYourXib", owner: self,options: [:])[0] as! UIView
// Add the subview to the cell
cell.addSubview(customView)
  1. 在您的 customCollectionViewCell 中,将此视图添加为子视图,然后快速添加。

【讨论】:

    【解决方案2】:

    您可以使用 xib 来做到这一点。您必须继承 UIView 的子类,然后必须将该视图加载为集合视图单元格。这样,您可以设计尽可能多的不同视图,并且可以使用/加载任何视图作为您希望的 collectionView 单元格。

    可能还有其他方法可以在集合中加载视图,我为您尝试过的方法是这样的:

    //Dequeue cell 
    let cell = collectionView.dequeueReusableCellWithReuseIdentifier("Cell", forIndexPath: indexPath)
    
    //Create instance of view you wish to load as cell
    let customView =     CustomView(frame:CGRectMake(0, 20, self.view.frame.size.width, 44))
    
    //Add the view inside cell
     cell.addSubview(customView)
    

    编辑/更新:

    顺便说一句,作为一个额外的问题,有没有办法在故事板上创建一个单独的 NIB 文件?

    不,这是不可能的,你不能简单地在storyboard上添加一个UIView,你必须先添加一个UIViewController来加载你的视图。故事板不过是 xib 的集合,不同之处在于您必须有一个 UIViewController 来保存/加载您的视图。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-04
      • 2012-07-14
      • 2012-06-03
      相关资源
      最近更新 更多