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 中确定它们在视图层次结构中的位置