2

我正在尝试呈现 a UIViewControllerinside a UIPopoverController。我在 Interface Builder 中设计了一个视图控制器,给了它一个自定义类(比如说MyAppTestViewController),我试图以这种方式创建一个弹出框:

MyAppTestViewController *fxViewController = [MyAppTestViewController new];

self.fxPopover = [[UIPopoverController alloc] initWithContentViewController:fxViewController];
self.fxPopover.popoverContentSize = CGSizeMake(1024, 120);

[self.fxPopover presentPopoverFromBarButtonItem:_fxButton permittedArrowDirections:UIPopoverArrowDirectionDown animated:NO];

当我按下按钮时,会在正确的位置以正确的大小显示一个弹出框,但它是空的。我已经验证了MyAppTestViewController'sviewDidAppear方法正在被调用(by NSLog),但是 Popover 的内部是空的:

ipad截图

我错过了什么吗?

4

2 回答 2

2

我看到您在评论中提到您正在使用故事板。那么为什么不对你的MyAppTestViewController. 您可以将 segue 直接连接到工具栏上的“效果”按钮。(或者,或者,performSegueWithIdentifier:从您的呈现视图控制器调用。)您可以通过将 UILabel 直接扔到MyAppTestViewController情节提要上并查看它是否正确显示来进行快速测试。

在此处输入图像描述

于 2012-10-28T20:47:26.760 回答
1

我认为问题出在这里:

MyAppTestViewController *fxViewController = [MyAppTestViewController new];

通常您会使用[[MyViewControllerClass alloc] initWithNibName:nil bundle:nil](假设您有一个名称匹配的 xib 文件)。我不相信我见过用new. Objective-C 中的一切都是 alloc-init。

Apple Docs:UIViewController 类参考

引用:

要使用 nib 初始化视图控制器对象,请使用 initWithNibName:bundle: 方法指定视图控制器使用的 nib 文件。然后,当视图控制器需要加载其视图时,它会使用存储在 nib 文件中的信息自动创建和配置视图。


编辑:

很吸引人,不错。看起来你对 new 关键字的使用是正确的,这里是对 this 的一点解释

很好,这不是问题。您是否尝试过打破viewDidAppear方法并使用调试器打印出视图属性,检查其框架,检查其超级视图等,尝试更好地理解问题?您可能已经知道如何执行此操作,但命令将是po self.view等等。

无论如何,我也发现了这个,尽管它只涉及弹出框演示的机制,而不涉及内容视图分配,您似乎对此有所了解。

于 2012-10-28T01:04:50.047 回答