Ios 以编程方式创建UIView子类的实例
我已经创建了UIView的一个子类,它刚刚覆盖了drawRect。为了简单起见,我不是在Interface Builder中创建UIView来表示我的子类,而是希望在UIViewController代码中创建它的实例 我尝试了以下方法:Ios 以编程方式创建UIView子类的实例,ios,swift,Ios,Swift,我已经创建了UIView的一个子类,它刚刚覆盖了drawRect。为了简单起见,我不是在Interface Builder中创建UIView来表示我的子类,而是希望在UIViewController代码中创建它的实例 我尝试了以下方法: canvasView = CanvasView(frame: view.bounds) canvasView.dataSource = self 以及: canvasView = UIView(frame: view.bounds) as! CanvasVie
canvasView = CanvasView(frame: view.bounds)
canvasView.dataSource = self
以及:
canvasView = UIView(frame: view.bounds) as! CanvasView
canvasView.dataSource = self
但对于他们两个,我都收到了错误
“UIView”类型的值没有成员“dataSource”
正确的做法是什么?我需要在IB中创建UIView吗?它嵌入在UIScrollView中,我也在以编程方式创建该视图,并且运行良好,因此如果可能的话,我真的希望不必这样做。除了UIView没有数据源这一事实之外,您所做的一切都很好 更多关于您想要实现的目标的信息将在这里有所帮助 因为我对你的画布没有定义,所以很难知道哪里出了问题。下面是我放在操场上的一些东西,它向您展示了一种为您的类设置数据源的方法
import UIKit
protocol DataSourceProtocol {
var data: Any { get set }
}
class DataSource: DataSourceProtocol {
var data: Any
init(data: Any) {
self.data = data
}
}
class ViewWithDataSource: UIView {
var dataSource: DataSourceProtocol?
}
let dataSource = DataSource(data: "Some Data")
let myView = ViewWithDataSource(frame: CGRectZero)
myView.dataSource = dataSource
编辑:编辑了一些不正确的陈述/假设您如何声明您的
画布视图
?您是否执行了var canvasView:UIView
?我不知道您对此的确切想法,但它清楚地表明canvasView
类没有dataSource
属性。那么告诉我们,到底有没有?CanvasView确实有。我得到的错误是UIView没有dataSource属性,这让我怀疑我是否正确创建了它的实例。那么我所做的看起来是正确的吗?是不是指定为private
的dataSource
属性?对此很抱歉,但我会信任编译器-在本例中-因为它非常简单,如果swift编译器是错误的,那将非常奇怪。canvasView
是如何声明的?例如,编辑您的问题以显示var canvasView…
我已经在我的类中声明了委托和数据源,但无可否认,对于iOS来说仍然是绿色的,我只是在遵循我看到的其他内置视图所做的。在这种情况下,我可能会转换为一名代表。您能为我们发布CanvasView的定义吗?@AdamCampbellUITableView
有数据源,UICollectionView
有数据源;视图没有理由不能有数据源。数据源实际上只是另一种委托模式;将委托(用于响应控件中的事件)和数据源(用于向控件提供数据)的功能分开可能是有意义的。您完全正确。答案已更新。我会在下周一早上回答之前再检查一下自己。