我有一个项目,我不太了解背后的意见和导航。我从AppDelegate
(MAAppDelegate
)开始,在那里定义属性:
@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内容(整个用户界面以编程方式完成,没有笔尖或故事板)。以下是viewDidLoad
的{{1}}:
MAController
我继续(在- (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];
课程中创建了一个viewController
,它被称为AppDelegate
,因此我认为它是对此的裁判,但现在我已经更改了它(在{ {1}})到view
,我猜我错了?
最后,我在'viewDidLoad`中创建了一个AppDelegate
:
viewController
并开始向我创建的UIView
新的UIView添加一组子视图。
所以,简而言之,我不知道发生了什么。后来,当我尝试告诉(来自UIView *header = [[UIView alloc] initWithFrame:headerFrame];
header.backgroundColor = [UIColor clearColor];
self.tableView.tableHeaderView = header;
内的方法)header
(我假设是MAController
负责我项目中的所有内容 - 在{{1 {}}} self.navigationController
我要用作表格的detailView的新navigationController
,它很奇怪。
所以我只是想了解什么是控件,AppDelegate
是什么,以及发生了什么。
答案 0 :(得分:1)
首先,花一点时间阅读导航控制器的工作原理。文档非常有用:
其次,您的问题是您的窗口的根视图控制器不是您创建的导航控制器。相反,它是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
做任何事情。也许这让你感到困惑。
答案 1 :(得分:1)
主窗口根设置为视图控制器而不是导航控制器
更改:
self.window.rootViewController = viewController;
为:
self.window.rootViewController = navController;
编辑:
您可以通过询问appDelegate从任何地方访问navigationController。通常认为这不是一个好习惯:
MAAppDelegate *delegate = (MAAppDelegate *)[[UIApplication sharedApplication] delegate];
UINavigationController *nav = delegate.navigationController;
不要忘记:
#import "MAAppDelegate.h"