ale*_*ent 3 storyboard ipad uipopovercontroller ios5
我有一个相对复杂的ui出现在一个popover中(复杂到足以从代码执行所有布局和关系会很痛苦),但是调用它的按钮被创建并放置在父视图中(存在于storyboard中)来自代码.
我已经尝试从父视图的viewcontroller对象创建一个popover segue到popover内容vc,然后使用performSegueWithIdentifier触发它.这几乎可以工作,但我无法弄清楚如何从代码中设置popOver的锚点,使它出现在错误的位置(在屏幕底部压扁).
有没有办法动态设置popOver segue的锚点?或者我可以创建一个UIPopOverController对象并获取我在故事板中放入的视图吗?还是有其他明显的方法可以做到这一点,我没有看到?
请温柔,我是新来的.
iPad iOS5.1 XCode4.3.2
亚历克斯,
我不完全确定我理解你想要做什么,但让我从我认为理解的东西中捅出它.
出于同样的原因(引用复杂性等),我经常在故事板中构建我的视图,然后从某个动作加载它们.您可以做的是通过标识符实例化视图控制器,如下所示:
FancyViewController *controller = [[self storyboard]
instantiateViewControllerWithIdentifier:@"FancyViewController"];
Run Code Online (Sandbox Code Playgroud)
这假设您已经创建了一个名为FancyViewController的UIViewController子类,并在故事板中为视图控制器设置了类型.
现在,您可以在弹出控制器中显示视图控制器,也可以将其推送到导航堆栈.您只需确保在故事板中为视图控制器设置标识符.

此外,如果您使用弹出控制器并且每次触发操作时只更新视图控制器属性,您可能希望实例化视图控制器一次.因此,如果它点击一个触发弹出窗口的按钮,您的代码可能如下所示:
- (IBAction)didTapButtonToShowFancyViewController:(id)sender
{
if (![self fancyViewController])
{
// fancyViewContrller is a property of type FancyViewController *
fancyViewController = [[[self storyboard]
instantiateViewControllerWithIdentifier:@"FancyViewController"];
// fancyViewPopoverController is also a property
fancyViewPopoverController = [[UIPopoverController alloc]
initWithContentViewController:fancyViewController];
}
// Perform setup on the fancy controller you want to do every
// time the action gets triggered here. Do initialization in the if
// block above.
// Now display the popover from the sender's frame. I'm assuming the
// sender is a UIButton.
[fancyViewPopoverController presentPopoverFromRect:[sender valueForKey:@"frame"]
inView:[self view]
permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
}
Run Code Online (Sandbox Code Playgroud)
动态设置popover的"锚"的唯一方法是使用一个调用presentPopoverFromRect:permittedArrowDirections:animated:而不是segue 的显式操作.
我希望有所帮助.如果我误解了你想要做的事,请告诉我.
最好的祝福.
| 归档时间: |
|
| 查看次数: |
2533 次 |
| 最近记录: |