在UIPopoverController中显示UIViewController

时间:2012-10-28 00:57:25

标签: ios xcode interface-builder ios6 uipopovercontroller

我想在UIViewController内提出UIPopoverController。我在Interface Builder中设计了一个视图控制器,给它一个自定义类(比方说MyAppTestViewController),我试图用这种方式创建一个popover:

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的{​​{1}}方法被调用(viewDidAppear),但是Popover的内部是空的:

ipad screenshot

我错过了什么吗?

2 个答案:

答案 0 :(得分:2)

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

enter image description here

答案 1 :(得分:1)

我认为问题在于:

MyAppTestViewController *fxViewController = [MyAppTestViewController new];

通常你会使用[[MyViewControllerClass alloc] initWithNibName:nil bundle:nil](假设你有一个匹配名称的xib文件)。我不相信我曾见过使用new初始化的视图控制器。 Objective-C中的所有内容都是alloc-init。

Apple文档:UIViewController Class Reference

引用:

  

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


编辑:

引人入胜,好吧。您似乎对使用新关键字here is bit of an explanation of this

是正确的

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

在任何情况下,我也找到了this,虽然它只涉及到popover演示的机制而不是内容视图分配,你似乎已经失败了。