【发布时间】:2014-03-24 22:23:09
【问题描述】:
我有一个项目,我不太了解背后的视图和导航。我从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 内容(整个 UI 以编程方式完成,没有 nib 或情节提要)。这是MAController 的viewDidLoad 的一部分:
- (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];
早些时候,我在AppDelegate 类中创建了一个viewController,它被称为view,所以我认为它是裁判,但现在因为我已经将它(在AppDelegate)更改为@987654342 @,我想我想错了吗?
最后,我在“viewDidLoad”中创建了一个UIView:
UIView *header = [[UIView alloc] initWithFrame:headerFrame];
header.backgroundColor = [UIColor clearColor];
self.tableView.tableHeaderView = header;
并开始向我创建的这个新 UIView header 添加一堆子视图。
所以,简而言之,我不知道发生了什么。后来,当我尝试告诉(从MAController 内部的一个方法)self.navigationController(我假设是navigationController 负责我项目中的所有事情 - 在AppDelegate 开头创建)到pushViewController新的viewController,我将用作表格的详细视图,它变得很奇怪。
所以我只是想了解什么可以控制,rootViewController 是什么,以及正在发生的事情。
【问题讨论】:
-
rootViewController就是这样 - 应用程序中的起始(或初始)视图控制器。您的第一个问题是您将viewController设置为navigationController 的初始视图控制器和应用程序的根视图控制器。您应该设置 self.window.rootViewController=navController。或者使用故事板 - 在使用 IB 的人和喜欢以编程方式创建一切的人之间,这可能有点“宗教”,但我发现故事板要快得多 -
请详细说明“它变得很奇怪”是什么意思。
标签: ios objective-c uiview uiviewcontroller uinavigationcontroller