UIView 类中的 Swift 集合视图委托

Posted

技术标签:

【中文标题】UIView 类中的 Swift 集合视图委托【英文标题】:Swift collection view delegate inside UIView class 【发布时间】:2017-06-29 09:33:59 【问题描述】:

我通过 UIView 内的故事板有一个集合视图。我正在继承 UIView 并调用一个名为 setupView() 的方法。当我尝试从类中分配代表和数据源时,它似乎不起作用。我可以通过这个类分配委托和数据源还是必须通过控制器来完成?

这是我的代码:

class homeView: UIView, UITextFieldDelegate 

@IBOutlet weak var collectionView: UICollectionView!
let storedService = StoredService()

override init(frame: CGRect) 
    super.init(frame: frame)
    print("I was called") // This doesn't print out!
    setupView() 


fileprivate func setupView() 

    collectionView.dataSource = storedService
    collectionView.delegate = storedService

【问题讨论】:

"这不会打印出来!"因为您将 init(frame: CGRect) 用于情节提要中的实体。您必须使用 initWithCoder: 使用drawRect 方法,设置您的视图或awakeNib 谢谢,drawRect 解决了! 如果你不绘制任何东西,覆盖 drawRect 是没有意义的。对于这种情况,最好重写 init。 【参考方案1】:

当然。它确实可以通过 UIView 类来完成。但它在init(frame: CGRect) 方法中不起作用。您需要在layoutSubviews()draw(_ rect: CGRect) 中运行它

像这样:

override func layoutSubviews() 
    collectionView.delegate = self
    collectionView.dataSource = self
 

【讨论】:

以上是关于UIView 类中的 Swift 集合视图委托的主要内容,如果未能解决你的问题,请参考以下文章

在 Swift 中单击 NSObject 内部的 tableView 中的项目时,如何在 NSObject 类中的 UIViewController 上的 UIView 之间正确切换?

不知道如何使用 Swift 将 UIView 类连接到 IB 中的视图

swift 以编程方式将UIScrollView滚动到Swift中的子UIView(子视图)的顶部

将 UIView 添加为子视图并在 Swift 中确定它们在视图层次结构中的位置

以编程方式将 UIScrollView 滚动到 Swift 中的子 UIView(子视图)的顶部

Swift - 想要在单击集合视图单元格内的按钮时进行更改