我想在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的内部是空的:
我错过了什么吗?
答案 0 :(得分:2)
我看到您在评论中提到您正在使用故事板。那么为什么不使用popover segue到你的MyAppTestViewController
?您可以将segue直接连接到工具栏上的“效果”按钮。 (或者,从您的呈现视图控制器中调用performSegueWithIdentifier:
。)您可以通过在故事板上将UILabel放入MyAppTestViewController
并查看它是否正确显示来进行快速测试。
答案 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演示的机制而不是内容视图分配,你似乎已经失败了。