2010-02-02 30 views
2

我正在處理地震xml iphone示例。 在那個例子中,有簡單的應用程序委託,它有一個類型爲UITableViewController的rootViewController。訪問navcontroller rootviewController的問題iphone

我想稍微修改它,以便我有一個navigationController並使用它的rootViewController作爲表視圖。我對我的導航控制器的根視圖控制器類被命名爲「firstLevelViewController」

在示例代碼,它說

[rootViewController.tableView reloadData]; 

我想說[navController.firstLevelViewController.tableView reloadData]

,但我得到的錯誤說:「要求會員firstLevelViewController在東西不是一個結構或聯盟「

如何從主應用程序委託引用navigationcontroller的rootViewController?

回答

3

UINavigationController中沒有firstLevelViewController屬性。如果您要訪問的電流控制器,你可以使用

UITableViewController* firstLevelViewController = navController.topViewController; 
assert([firstLevelViewController isKindOfClass:[UITableViewController class]]); 
[firstLevelViewController.tableView reloadData]; 

如果firstLevelViewController意味着底部的視圖控制器,你可以使用

UITableViewController* firstLevelViewController = [navController.viewControllers objectAtIndex:0]; 
.... 
+0

啊!非常感謝。 我的意思是「firstLevelViewController」是導航控件顯示的默認第一個根屏幕。 我在一本書中讀到這個永遠存在的東西。 如果我總是想引用我正在使用的firstLevelViewController,我會使用objectAtIndex:0方法嗎? – dubbeat 2010-02-02 18:35:37

+0

@dubbeat:是的。但將值存儲在您的App委託的某些屬性或靜態全局變量中可能更有效。 – kennytm 2010-02-02 20:30:27

+0

謝謝!!!!!!!!! – SpaceDog 2011-01-14 18:05:50

0

訪問RootViewController的這樣的:

目的-C

YourViewController *rootController =(YourViewController*)[[(YourAppDelegate*) 
           [[UIApplication sharedApplication]delegate] window] rootViewController]; 

斯威夫特

let appDelegate = UIApplication.sharedApplication().delegate as AppDelegate 
let viewController = appDelegate.window!.rootViewController as YourViewController