0

我有一個項目,我並不真正理解後面的視圖和導航。我在AppDelegateMAAppDelegate)開始的,在那裏我定義屬性:不理解NavigationController和UIViewControllers在iOS中的工作方式

@property (strong, nonatomic) UIWindow *window; 
@property (strong, nonatomic) UIViewController *detailViewController; 

然後在MAAppDelegate.m,我創建了一個navigationController

@implementation MAAppDelegate 
@synthesize detailViewController; 
@synthesize window; 

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 

    // Init the navController for the Master Detail View of the grade cells 

    UINavigationController *navController = [[UINavigationController alloc] init]; 


    detailViewController = [[UIViewController alloc] init]; 

    UIViewController *viewController = [[MAController alloc] init]; 

    navController = [[UINavigationController alloc] initWithRootViewController:viewController]; 

    self.window.rootViewController = viewController; 

    [self.window makeKeyAndVisible]; 

    return YES; 
} 
在這一點上

所以,我想我有一個工作naviationController,我已經設置了一個自定義UIViewController(自定義類MAController)的實例,我已將其設置爲rootViewController

然後,在我的MAController班,在那裏我做所有我的UI東西類(整個UI以編程方式完成,沒有碎粒或故事板)。這是一個有點MAControllerviewDidLoad的:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view. 


    [self.navigationController setNavigationBarHidden:YES]; // I commented this line out and realized it does nothing 

我去(在viewDidLoad)一堆子視圖添加到self.view,這樣

[self.view addSubview:self.backgroundImageView]; 

早些時候,我創造了一個viewControllerAppDelegate類,它被稱爲view,所以我認爲它是裁判,但現在我已經改變它(在AppDelegateviewController,我想我錯了?

然後終於,我在「viewDidLoad`創建UIView

UIView *header = [[UIView alloc] initWithFrame:headerFrame]; 
header.backgroundColor = [UIColor clearColor]; 
self.tableView.tableHeaderView = header; 

,並開始加入一些子視圖的這一新的UIView我創建header

所以,總之,我有不知道發生了什麼事。後來,當我試圖告訴(從方法內部MAControllerself.navigationController(我認爲是負責一切都在我的項目navigationController - 在AppDelegate在開始創建)pushViewControllerviewController我是要爲使用detailView爲一張桌子,它變得很奇怪。

所以我只是想了解什麼是控制,什麼是rootViewController,以及正在發生的事情。

+0

了'rootViewController'就是這樣 - 開始(或初始)視圖在您的應用程序控制器。你的第一個問題是,你已經將'viewController'設置爲你的navigationController的初始視圖控制器和你的應用程序的根視圖控制器。你應該設置self.window.rootViewController = navController。或者使用故事板 - 它可以是那些使用IB和那些更喜歡以編程方式創建所有內容的「宗教」東西,但我發現故事板要快得多 – Paulw11

+0

請詳細說明您的意思是「它有多奇怪」。 – Aaron

回答

1

主窗口根設置爲一個視圖控制器和不導航控制器

變化:

self.window.rootViewController = viewController; 

到:

self.window.rootViewController = navController; 

編輯:

可以訪問通過詢問你的appDelegate從任何地方的navigationController。它通常不被認爲是一個很好的做法:

MAAppDelegate *delegate = (MAAppDelegate *)[[UIApplication sharedApplication] delegate]; 
UINavigationController *nav = delegate.navigationController; 

不要忘記:

#import "MAAppDelegate.h" 
+0

如何訪問我在'MAController'類的'MAAppDelegate'中創建的'navController'?是隻是'self.navController'? – AndrewSB

+0

這通常不是一個好習慣,但是您可以通過詢問您的應用程序委託來獲取navigationController:AppDelegate * delegate =(AppDelegate *)[[UIApplication sharedApplication] delegate]; UINavigationController * nav = delegate.navigationController; – EhTd

1

首先,花點時間閱讀導航控制器的工作方式。該文檔是非常有幫助:

https://developer.apple.com/library/ios/documentation/uikit/reference/UINavigationController_Class/Reference/Reference.html

其次,你的問題是,你的窗口的根視圖控制器是不是你創建的導航控制器。相反,它是MAController的一個實例。這是你在做什麼:

UIViewController *viewController = [[MAController alloc] init]; 

// some other code ... 

self.window.rootViewController = viewController; 

我覺得你的意思添加MAController作爲導航控制器的根視圖控制器,使導航控制器你的窗口的根。如果是這樣,你要設置你的視圖控制器像這樣:

UIViewController *viewController = [[MAController alloc] init]; 
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:viewController]; 
self.window.rootViewController = navController; 

另一個潛在的問題是,你似乎沒有被做任何事情與你detailViewController。也許這也讓你感到困惑。

+0

明天我要通過文檔,謝謝,我用'detailViewControl'作爲主細節類型'TableView'的'detailViewControl'' UIView'作爲一些表格單元格的細節。 – AndrewSB

+0

如何訪問我在'MAController'類的'MAAppDelegate'中創建的'navController'?是隻是'self.navController'? – AndrewSB

+1

是的,在這種情況下,您將如何訪問MAController的導航控制器。 – Aaron

相關問題