在 UIPopoverController 中显示 UIViewController
Posted
技术标签:
【中文标题】在 UIPopoverController 中显示 UIViewController【英文标题】:Displaying UIViewController inside a UIPopoverController 【发布时间】:2012-10-28 00:57:24 【问题描述】:我正在尝试在 UIPopoverController
中显示 UIViewController
。我在 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
的viewDidAppear
方法正在被调用(由NSLog
),但是Popover 的内部是空的:
我错过了什么吗?
【问题讨论】:
【参考方案1】:我看到您在评论中提到您正在使用情节提要。那么为什么不对你的MyAppTestViewController
使用popover segue 呢?您可以将 segue 直接连接到工具栏上的“效果”按钮。 (或者,或者,从您的呈现视图控制器调用 performSegueWithIdentifier:
。)您可以通过将 UILabel 扔到故事板上的 MyAppTestViewController
中并查看它是否正确显示来进行快速测试。
【讨论】:
我在苦苦思索,我不知道为什么。这工作得很好。谢谢【参考方案2】:我认为问题出在这里:
MyAppTestViewController *fxViewController = [MyAppTestViewController new];
通常您会使用[[MyViewControllerClass alloc] initWithNibName:nil bundle:nil]
(假设您有一个名称匹配的 xib 文件)。我不相信我见过用new
初始化的视图控制器。 Objective-C 中的一切都是 alloc-init。
苹果文档:UIViewController Class Reference
引用:
要使用 nib 初始化视图控制器对象,请使用 initWithNibName:bundle: 方法指定使用的 nib 文件 视图控制器。然后,当视图控制器需要加载它的 视图,它使用自动创建和配置视图 保存在 nib 文件中的信息。
编辑:
很吸引人,好吧。看来您对新关键字here is bit of an explanation of this 的使用是正确的。
很好,这不是问题。您是否尝试过打破viewDidAppear
方法并使用调试器打印出视图属性、检查其框架、检查其超级视图等等,试图更好地理解问题?您可能已经知道如何执行此操作,但命令将是 po self.view
等等。
无论如何,我也找到了this,尽管它只涉及弹出框呈现的机制,而不涉及内容视图分配,您似乎已经掌握了。
【讨论】:
不,我已经成功地使用new
初始化了许多视图控制器,这只是 alloc-init 的简写。我没有使用单独的笔尖,它是我故事板中的视图控制器。
你最后提供的链接真的很有用,谢谢。正如 Jay Slupesky 所回答的那样,我最终决定通过呈现一个 popover segue 来直观地实现 popover 控件。我发现视觉设计更干净,并在设计时尽量避免代码.. 无论如何感谢您的链接。以上是关于在 UIPopoverController 中显示 UIViewController的主要内容,如果未能解决你的问题,请参考以下文章
在 UIPopOverController 中显示 Master/Detail UITableView
无法在 UIPopoverController 中显示视图控制器
如何在 iPhone 上的 UIPopoverController 中显示 NavigationController-background
想要在 UIAlertController 或 UIPopoverController Swift 中显示 UIPickerView?