导航控制器和模态视图

3

我是iOS世界的新手,已经开始在模板代码上构建自定义代码。所以请原谅我显而易见的问题。

视图链始于一个包含应用程序委托对象、窗口对象和应用程序视图控制器的MainWindow.xib。我不明白为什么需要那些对象。但我明白,我需要在"Nib Name"属性中提到起始视图控制器,以启动我的自定义视图控制器(称为"EmptyViewController")。它是一个虚拟的视图控制器,只是为了避免由于缺少有效视图控制器而导致崩溃。

我在didFinishLaunchingWithOptions中启动单独的模态视图控制器(MainViewController)。

启动模态视图控制器的代码如下:

self.window.rootViewController = self.viewController;
mainView = [[MainViewController alloc] initWithNibName:@"MainViewController" bundle:nil];
// present the viewcontroller
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:mainView];

[self.viewController presentModalViewController:navController animated:NO];

// release it, because it's retained as modalViewController
[navController release];

我没有将这个MainViewController放在MainWindow.xib中,因为我想让导航栏位于MainViewController的根部。 在MainViewController内,当按下“帮助”按钮时,我会推出HelpViewController。 但是HelpViewController没有显示任何导航栏。我不明白为什么?
推送导航栏的代码如下:
HelpViewController *helpVC = [[HelpViewController alloc] init];
[self.navigationController pushViewController:helpVC animated:YES];
[helpVC release];

我希望能够了解以下几个问题: 1)为什么需要MainWindow.xib?我能否删除它?(注意:我试图删除它,但是屏幕变成了空白) 1.a)为什么需要所有的控件/对象——应用程序委托对象、窗口对象和应用视图控制器对象?

2)为什么HelpViewController不显示导航栏? 3)另外我注意到,如果我说self.presentingViewController,会返回EmptyViewController处理,而popViewController会将我返回到MainViewController。

谢谢


如果我的回答能够帮到你,请点击“V选择”和“+”进行点赞。 - meaning-matters
@meaning-matters 你的回答回答了我已经知道的内容。我正在寻找更精确的答案。 - katch
1个回答

0

应用程序代理只是实现了一些应用级别的“回调”,借此iOS与您自己的代码通信。在main.m中,您可以看到iOS被告知哪个类实现了UIApplicationDelegate。iOS创建该类的一个实例,并在适当的时候调用这些委托方法(“回调”)(例如当应用程序进入后台时)。

窗口是iOS提供的东西,您的应用程序需要告诉它在窗口上显示什么。正如您所看到的,这通常是在didFinishLaunchingWithOptions中完成的(iOS调用它来通知您的应用程序准备好开始工作了)。

视图控制器是处理在窗口上显示的内容状态的类。您不会直接在窗口上显示内容,而是使用视图。每个视图控制器都有一个带有UI元素的视图。

XIB或NIB是UI描述/布局文件。 XIB和View是链接在一起的;您需要告诉XIB UI元素属于哪个视图控制器成员(例如UILabel),并告诉XIB在某个UI事件(例如用户点击按钮)上调用哪个视图控制器方法。

这些是基础知识。我知道它并没有回答你所有的问题;我建议你阅读非常好的Apple文档。不要试图立刻理解一切,因为事情,正如你正在经历的那样,起初的确可能看起来毫无逻辑。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接