2009-12-16 103 views
1

我有一個基本問題讓我發瘋。iPhone UITableViewDelegate問題

我有一個繼承自UITableViewController的類。它是我的導航控制器中的根控制器。我有另一個類實現UITableViewDelegate和UITableViewDataSource協議(我的委託)。

基本上,在我委託的tableView:didSelectRowAtIndexPath:方法中,我想推新控制器。

當委託協議是簡單地由執行的UITableViewController,很容易:

[self.navigationController pushViewController:nextController animated:YES]; 

我(顯然)不能這樣做,在委託類。 我該如何引用UITableViewController子類來訪問navigationController?這讓我瘋狂!


基本流程:

  1. 的UITableViewController電話委託
  2. 委託運行的tableView:didSelectRowAtIndexPath方法:
  3. 在代理的的tableView:didSelectRowAtIndexPath方法:,代碼需要推新控制器到navigationController
  4. 委託沒有引用navController或TableViewController來執行推送。
  5. 如果我嘗試通過屬性傳遞給委託tableController或navController,代碼會給出編譯器錯誤。所以,我不能給它一個參考返回到調用tableViewController
+0

一個簡單的解決方案可能是沒有額外的類在所有的,只是實現你的根控制器類表視圖委託方法。 – 2009-12-16 20:56:45

回答

0

您的UIApplicationDelegate應該有一個對導航控制器的引用。您實際上並不需要參考UITableViewController

你可以簡單地做這樣的事情:

// Get the App delegate 
YourAppDelegate * app = (YourAppDelegate *)[[UIApplication sharedApplication] delegate]; 

// Get the UINavigationController used by the application 
UINavigationController * nav = app.navigationController; 

// Push the next view controller 
[nav pushViewController:nextController animated:YES]; 
+0

*甩額頭* 我知道我俯視的東西很容易!我是從Java進來的,所以關於如何放在一起的一些層次結構仍然是模糊的:) 謝謝! – John 2009-12-16 21:00:35