在Storyboard中布局视图然后从代码中加载到PopOver中?

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

Mat*_*ong 8

亚历克斯,

我不完全确定我理解你想要做什么,但让我从我认为理解的东西中捅出它.

出于同样的原因(引用复杂性等),我经常在故事板中构建我的视图,然后从某个动作加载它们.您可以做的是通过标识符实例化视图控制器,如下所示:

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 的显式操作.

我希望有所帮助.如果我误解了你想要做的事,请告诉我.

最好的祝福.