2014-04-29 82 views
0

過去,我一直在視圖控制器的「viewDidLoad」方法中註冊一個單元的類和重用標識。當視圖控制器符合UITableViewDataSource並充當表的數據源時,它工作正常。但是,我想要創建一個獨立的類作爲數據源。如何使UITableViewDatasource獨立於UIViewController

換句話說,在「viewDidLoad」中調用「registerNib:forCellReuseIdentifier:」或「registerClass:forCellReuseIdentifier:」會在視圖控制器和充當數據源的類之間創建非常緊密的綁定,並且違反數據源實現:具體來說,實現「cellForRowAtIndexPath:」時,數據源必須使用與視圖控制器中指定的相同的類並重用id。

有沒有什麼方法可以讓數據源指定類和重用ID,並保持視圖控制器中隱藏的內部實現細節?

+0

你可以使重用標識符是你的'UIViewDataSource'屬性,然後設置視圖控制器的屬性? – Paulw11

+0

這是它的一半。我正在做這個工作。我想你也可以指定類或筆尖,但是你真的會暴露實現細節!但我真的希望能夠更改數據源類而不必更改其他類。 – user3583522

回答

0

讓你的dataSource/delegate有一些方法來配置一個表視圖。

例如,在您的數據源對象:

- (void)configureTableView:(UITableView *)tableView 
{ 
    [tableView registerClass:[SomeClass class] forCellReuseIdentifier:@"SomeIdentifier"]; 
} 

或者,但稍微尷尬(IMO),將註冊它,當你得到cellForRowAtIndexPath通話(你居然出列前)。您應該確保您只在每個表視圖中註冊一次。

+0

數據源能夠配置表,但是什麼時候這樣做是問題。不過,你的另一種想法是可行的。是的,這意味着你必須跟蹤狀態,但這是課堂內部的。如果我決定要使用不同的單元類,那麼我將能夠在數據源之外不做任何更改的情況下執行此操作。我會去嘗試一下。 – user3583522

+0

我剛試過,它工作正常。我在類中添加了一個簡單的狀態布爾值。通過跟蹤每個UITableView的狀態可以推廣到使用多個UITableView。是的,這很尷尬,但是效果很好。謝謝! – user3583522

0

作爲數據源的自定義類必須符合UITableViewDataSource協議,但沒有任何東西阻止它符合您定義的其他協議。例如,您可以使用將nib名稱和單元ID作爲輸入的方法來定義協議,並且需要在調用時註冊該NIB。

或者,自定義類的指定初始值設定項可能爲initWithNibName:andCellID:。當您分配/初始化自定義類時,傳遞nib名稱和單元ID,並讓自定義類註冊NIB。

+0

提供一個額外的接口可以工作,但它會再次將實現細節放入接口中。 – user3583522