2015-04-03 55 views
0

我想創建一個自動生成UITableViewCell的類註冊表類,當用戶按下按鈕時,它將轉到該類並運行代碼。如何自動初始化不同類別的對象?

目前做這樣的事情,在視圖控制器我必須做這樣的事情

Function1Class *function = [[Function1Class alloc] init]; 
function.view.backgroundColor = [self veryLightGrayColor]; 
[self.navigationController pushViewController: menu animated: YES]; 

然後在數據源我在cellForRowAtIndexPath作出新的情況,並在委託我做的情況下,在didSelectRowAtIndexPath中進行單行方法調用。

我想更改代碼,以便任何人想在一個地方,一個新的類添加到這個頁面可以做的,是這樣的:

Function1 *function; 
[self addClass:function]; 

而在addClass的「功能」傳遞將存儲在一個數組中

對於cellForRowAtIndexPathdidSelectRowAtIndexPath的情況下,他們可以很容易地通過存儲在一個數組中調用正確的方法。

問題是如何自動化傳遞到addClass的每個類對象的初始化?

我能得到用戶編寫代碼來完成他們班

Function1 *function = [[Function1 alloc] init]; 
[self addClass:function]; 

那麼該類對象已經被初始化加,但在啓動過程中,這意味着每一個類的對象是越來越初始化,這是一個問題如果有很多課程。我如何從數組中取出一個類對象,然後初始化它以使用它?類對象是不同階層,所以我不能硬編碼arrayOfClassObjects[i] = [[Function1 alloc] init];

感謝

+0

你可以使用反射嗎?就像'[[NSClassFromString(@「ClassNameOnlyKnownAtRuntime」)alloc] init]'? – 2015-04-03 22:35:01

+0

^這可能是非常有前途的。讓我試試看。 – 2015-04-03 22:44:26

回答

1

類是對象,所以你可以存儲類中的數組:

NSArray *functions = @[ [Function1 class], 
         [Function2 class] ]; 

然後,當你想實例化一個,你把它間接:

id instance = [[functions[0] alloc] init]; 

所以你addClass:應該是這樣的:

- (void)addClass:(Class)cls { 
    [self.classList addObject:cls]; 
}