2016-03-06 53 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

相關問題