从 Xib 呈现模态视图控制器

Posted

技术标签:

【中文标题】从 Xib 呈现模态视图控制器【英文标题】:Presenting Modal View Controller From Xib 【发布时间】:2012-05-05 14:48:53 【问题描述】:

我想显示一个来自 xib 的模式对话框。显示我的窗口的代码是:

self.vcSettings = [[ViewControllerSettings alloc] initWithNibName:@"ViewControllerSettings" bundle:[NSBundle mainBundle]];  

[self presentModalViewController:self.vcSettings animated:YES];

当它运行时,我得到一个空白屏幕,而不是我的 ViewControllerSettings.xib 里面的内容。我想我以某种方式错误地显示了视图。任何建议表示赞赏。

编辑:

我觉得应该是这样的

[self.navigationController presentModalViewController:self.vcSettings animated:YES];

但由于某种原因,self.navigationController 为零。

编辑:

Self 是在我的 AppDelegate 中实例化的 UIViewController,如下所示:

UIViewController* viewMain = [[ViewController_iPhone alloc]     initWithNibName:@"ViewController_iPhone" bundle:nil];

self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.
self.window.backgroundColor = [UIColor whiteColor];
self.window.rootViewController = viewMain;
[self.window makeKeyAndVisible];

【问题讨论】:

如何将方法切换到 [self presentViewController:self.vcSettings animated:YES 完成:^ NSLog(@"%@", self.presentedViewController); ];控制台上打印什么? self.presentedViewController 对象是 nil 吗? 确保 viewcontroller 的 view 出口连接到其 xib 中的根视图。 @Vladim,谢谢,视图连接在根视图 xib 中 @Jacob,如果我运行它,那条线会在 main 中给我一个 sigabrt 【参考方案1】:

你需要创建一个UINavigationController,将它的根视图设置为你想要呈现的XIB控制器(在你的情况下是vcSettings,然后呈现UINavigationController

self.vcSettings =  [[ViewControllerSettings alloc] initWithNibName:@"ViewControllerSettings" bundle:nil];
UINavigationController *controller = [[UINavigationController alloc] initWithRootViewController:vcSettings];
[self.navigationController presentModalViewController:controller animated:YES];

【讨论】:

以上是关于从 Xib 呈现模态视图控制器的主要内容,如果未能解决你的问题,请参考以下文章

为啥在呈现这个模态视图时会有延迟?

如何从模态视图控制器调用呈现视图控制器的方法

从模态视图呈现视图控制器给出错误

从模态呈现的视图控制器内部呈现 UIPopoverController

UITabBar 模态视图控制器

关闭从模态呈现的视图控制器翻转的视图控制器