NavigationController和模态视图

时间:2013-08-28 12:15:48

标签: iphone ios objective-c uinavigationcontroller modal-dialog

我是iOS世界的新手,已经开始在模板化代码之上构建自定义代码。 所以请原谅我。

View链以MainWindow.xib开头,其中包含App Delegate对象,Window对象和Application ViewController。我不明白为什么那边需要那些物品。但是我理解,我需要提到在"Nib Name"属性中启动ViewController以启动我的自定义视图控制器(称为" EmptyViewController")。它是一个虚拟视图控制器,只是为了避免由于缺少有效的viewcontroller而发生崩溃。

我在MainViewController内启动了一个单独的模态视图控制器(didFinishLaunchingWithOptions)。 用于启动模态视图控制器的代码 -

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内部,当" help"时,我会推送HelpViewController。按下按钮。 但HelpViewController不显示任何导航栏。我不明白为什么?

推送导航栏的代码 -

HelpViewController *helpVC = [[HelpViewController alloc] init];
[self.navigationController pushViewController:helpVC animated:YES];
[helpVC release];

所以我想了解 - 1)为什么需要MainWindow.xib?我可以删除它吗? (注意:我试图删除它,但后来我得到了空白屏幕) 1.a)为什么需要所有控件/对象App Delegate Object,Window Object和Application ViewController对象?

2)为什么没有HelpViewController显示导航栏? 3)我注意到的另一件事,如果我说self.presentingViewController,则会返回EmptyViewController句柄,而popViewController会将我返回给MainViewController。

由于

1 个答案:

答案 0 :(得分:0)

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

窗口是iOS提供的,您的应用程序需要告诉它在其上显示的内容。而且,正如您所看到的,这通常在didFinishLaunchingWithOptions中完成(iOS会调用它来通知您的应用程序已准备好开始使用)。

View Controller是一个处理您在Window上显示的内容状态的类。您不直接在Window上显示内容,而是使用Views。每个View Controller都有一个带UI元素的视图。

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

这些是基础知识。我知道它没有回答你的所有问题;我建议你阅读非常好的Apple文档。不要试图立即理解所有事情,正如你所经历的那样,开始时确实看起来不合逻辑。