2012-03-04 19 views
0

PrimaryViewController.h我有連接到我在的.xib文件添加表的IBOutlet使用pushViewController在不同的表委託

IBOutlet UITableView *table; 
在PrimaryViewController.m

我從TableDataController類構造一個新的tableController並附加到表

tableController = [[TableDataController alloc] initWithStyle:UITableViewStylePlain]; 
//Attach the table controller as datasource and delegate to the table 
[table setDelegate:tableController]; 
[table setDataSource:tableController]; 

現在表中的所有數據都來自tableController。由於PrimaryViewController是被推送到navigationController而不是TableDataController類的堆棧的類;使用:

[self.navigationController pushViewController:newViewController]; 

tableController結果毫無作爲tableController沒有navigationController。它是PrimaryViewController誰可以使用navigationController

我想要做的就是使用TableDataController中的函數didSelectRowAtIndexPath:將新的視圖控制器推送到PrimaryViewController的堆棧上。

請注意:我不能#import "ParimaryViewController.h" 到我TableDataController.h所以我可以把它(PrimaryViewController)對象 - 那麼他們將跨進口對方,產生語義錯誤。

PrimaryViewController是一個普通的類,用一個.xib擴展UIViewController類沒什麼特別的。 TableDataController是一個普通的類,它擴展了UITableViewController類,其中沒有 .xib文件。

回答

0

您可以將PrimaryViewController標題導入到TableDataController中。 m避免導入週期。

您的TableDataController只需要參考PrimaryViewController。您只需將屬性添加到TableDataController,並在創建數據控制器後立即進行設置。

@property (assign, nonatomic) PrimaryViewController * viewController; 

爲了能夠使用這個類的名字,則需要在TableDataController.h權限添加進口低於預先聲明:

@class PrimaryViewController; 

這讓編譯器知道有這樣的一個類,你會在這個頭文件中引用它,但它將在別處定義。

像往常一樣合成屬性。當您創建TableDataController,你設置該屬性指向創建視圖控制器:

tableController = [[TableDataController alloc] initWithStyle:UITableViewStylePlain]; 
[tableController setViewController:self]; 

現在,您可以留言通過訪問該屬性在TableDataController的方法的視圖控制器:

[self.viewController pushViewController:newViewController]; 
+0

謝謝喬希, 我剛剛嘗試這樣做,我仍然有一些問題。沒有其他方法可以做我想做的事 即使用不同類的pushViewController嗎?這一定是我想到之前完成的事情。 – hishamaus 2012-03-04 22:15:01

+0

如果在你的問題中沒有更多的信息,這很難說。究竟是什麼問題?我看到的主要問題是:你的'TableDataController'如何首先獲得對視圖控制器的引用?它在哪裏創建?在xib中,還是在代碼中?你可以編輯你的問題,在這裏包含更多關於結構的信息嗎? – 2012-03-04 22:18:41

+0

我剛編輯過這個問題。感謝您的幫助 – hishamaus 2012-03-05 00:55:31