我刚刚在我的应用程序的表格视图中实现了 3D Touch 的 peek and pop 功能。我正在为 peek 视图使用不同的、更简洁的视图控制器,并且我希望 pop 将用户带到视图的完整版本(与 Instagram 应用程序的风格相似)。
我想弄清楚我怎么能做到这一点?当我实例化 peek 时,我看不到如何在代码中做到这一点,所以我唯一能想到的就是在弹出后立即转到完整视图?
有人有想法么?
编辑:
这是我的意思的那种系统:
这对我有用。也许做一个条件语句- (void)previewingContext:
(id<UIViewControllerPreviewing>)previewingContext
commitViewController:(UIViewController *)viewControllerToCommit
来帮助你确定你想要去的全屏以及它是如何显示的。如果满足此条件语句,则实例化UIViewController
usingself.storyboard instantiateViewControllerWithIdentifier....
然后推送到它。这是我的例子:
- (void)previewingContext(id<UIViewControllerPreviewing>)previewingContext
commitViewController:(UIViewController *)viewControllerToCommit {
//this check is only for demonstration purposes
if (viewControllerToCommit) {
FullViewController * fullVC = [self.storyboard instantiateViewControllerWithIdentifier:@"fullVC"];
[self.navigationController pushViewController:exp animated:YES];
}
}
您可以在界面生成器中设置故事板标识符:
如果您需要更多帮助,请告诉我,但我需要更多信息。
我想你回答了你自己的问题。直接转到完整视图。viewControllerToCommit
显示on pop不是强制性的。您可能仅使用该精简的 viewController 引用来确定将什么传递给您的完整视图。例如,如果它是一个详细视图,则在您的精简视图中传递该对象,该详细信息是从该视图派生的。
-(void)previewingContext:(id<UIViewControllerPreviewing>)previewingContext commitViewController:(UIViewController *)viewControllerToCommit
{
SomeClass *detailObj = viewControllerToCommit.detailObject;
DetailVCClass *detailViewControllerFull = [[DetailVCClass alloc] initWithObject:detailObj];
// Present the full VC
[self presentViewController:detailViewControllerFull animated:YES completion:nil];
// Alternatively, using Nav controller, you might pop onto the stack
[self.navigationController pushViewController:detailViewControllerFull animated:YES];
}
当然,您正在使用情节提要,因此您会相应地进行调整。
关键是,仅仅因为它们为您提供了对您在 peek 中呈现的精简视图的参考,并不意味着这是您必须弹出的视图。他们命名它并没有帮助viewControllerToCommit
。