iOS開發新手,我一直在關注developer.apple.com上的教程,現在正在爲這些示例添加功能以進一步提高我的知識水平。以編程方式訪問視圖控制器
「second ios app」教程爲您提供了一個基於導航控制器的應用程序。擴展這個應用程序,我想有一個標籤欄控制器作爲第一個視圖控制器。
所以我現在有以下設置:
都很好。但是BirdsAppDelegate(UIApplicationDelegate)中有一些代碼依賴於作爲根視圖控制器的導航控制器,因此它可以創建和分配「datacontroller」對象。
這是原來的代碼(前我加標籤欄控制器):
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
UINavigationController *navigationController = (UINavigationController *)self.window.rootViewController;
BirdsMasterViewController *firstViewController = (BirdsMasterViewController *)[[navigationController viewControllers] objectAtIndex:0];
BirdSightingDataController *aDataController = [[BirdSightingDataController alloc] init];
firstViewController.dataController = aDataController;
return YES;
}
現在,因爲它假設根視圖控制器是導航控制器此代碼失敗。
我已經更新了代碼,以便它的作品 - 但在我看來,這是醜陋的,而且會對每次我進行了更改視圖控制器層次時間改變:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions: (NSDictionary *)launchOptions
{
// Override point for customization after application launch.
UITabBarController *tabBarController = (UITabBarController *)self.window.rootViewController;
UINavigationController *navigationController = (UINavigationController *) [[tabBarController viewControllers] objectAtIndex:0];
BirdsMasterViewController *firstViewController = (BirdsMasterViewController*) [[navigationController viewControllers] objectAtIndex:0];
BirdSightingDataController *aDataController = [[BirdSightingDataController alloc] init];
firstViewController.dataController = aDataController;
return YES;
}
所以我的問題是:什麼是更好的方式來做我在上面的代碼中做的事情,以便對層次結構的任何更改都不會破壞代碼?
如何以編程方式訪問視圖控制器我在應用程序委託之後,以便我可以創建並分配它的BirdSightingDataController對象?
謝謝!
太好了 - 就是這樣!好和容易:) – Stretch 2012-03-06 02:56:05