2016-03-06 55 views
0

我已经创建了只有drawRect被覆盖的UIView的子类。为了简单起见,我并没有在Interface Builder中创建一个UIView来表示我的子类是什么,而是想在我的UIViewController代码中创建它的一个实例。以编程方式创建UIView子类的实例

我已经试过如下:

canvasView = CanvasView(frame: view.bounds) 
canvasView.dataSource = self 

除了:

canvasView = UIView(frame: view.bounds) as! CanvasView 
canvasView.dataSource = self 

但对他们俩的我收到错误..

价值型“ UIView'has no member'dataSource'

这是怎么回事?我需要需要在IB中创建UIView吗?它嵌入在一个UIScrollView中,我也以编程方式创建并运行良好,所以如果可能的话,我真的不希望这样做。

+3

你怎么宣布你'canvasView'?你做了'var canvasView:UIView'吗? –

+0

我不知道你对此的确切想法,但它清楚地表明'CanvasView'类没有'dataSource'属性。所以告诉我们 - 不要这样做? –

+0

CanvasView确实有它。我得到的错误是UIView没有dataSource属性,这是什么让我质疑我是否正确创建它的一个实例。我在做什么看起来是正确的呢? – Mathieson

回答

0

除非事实上UIView没有数据源,否则你正在做的事情很好。

关于你想达到什么的更多信息在这里会有所帮助。

因为我没有CanvasView的定义,所以很难知道发生了什么问题。下面是我在一个操场上放置的东西,它向您展示了一种可以为您的班级设置数据源的方法。

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 

编辑:编辑了一些不正确的语句/假设

+0

我已经在我的类上声明了一个委托和数据源,但无可否认,它仍然对iOS是绿色的我只是遵循我所看到的其他内置视图所做的事情。那么我可能会切换到这种情况下的委托。 – Mathieson

+0

您能否为我们发布CanvasView的定义? –

+2

@AdamCampbell'UITableView'有数据源,'UICollectionView'有数据源;没有理由意见不能有数据源。数据源实际上只是另一种代表模式;它可能是有意义的,将委托的功能(响应控件中的事件)和数据源(向控件提供数据)分开是合理的。 – Paulw11

相关问题