亚历克斯,
我不完全确定我理解你想要做什么,但让我从我认为我理解的内容中尝试一下。
出于您引用的相同原因(视图复杂性等),我经常在情节提要中构建我的视图,然后从某些动作中加载它们。你可以做的是通过标识符实例化视图控制器,如下所示:
FancyViewController *controller = [[self storyboard]
instantiateViewControllerWithIdentifier:@"FancyViewController"];
这假设您已经创建了一个名为 FancyViewController 的 UIViewController 子类,并在情节提要中设置了视图控制器的类型。
现在,您可以在弹出控制器中显示视图控制器,也可以将其推送到导航堆栈上。您只需要确保已在情节提要中设置了视图控制器的标识符。
此外,如果您使用 popover 控制器并且每次触发操作时只需更新视图控制器属性,您可能希望实例化一次视图控制器。因此,如果它点击触发弹出框的按钮,您的代码可能如下所示:
- (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];
}
动态设置弹出框的“锚点”的唯一方法是使用调用presentPopoverFromRect:permittedArrowDirections:animated:
而不是 segue 的显式操作。
我希望这会有所帮助。如果我误解了您要执行的操作,请告诉我。
最好的祝福。