Ios 自定义Segue推/弹出UIViewController

Ios 自定义Segue推/弹出UIViewController,ios,ios5,storyboard,segue,Ios,Ios5,Storyboard,Segue,我正在尝试实现一个像flip transition这样的iBooks作为故事板。segue应该按resp。将destinationViewController弹出到UINavigationControllers堆栈上或从中弹出 我可以在seguesperform方法中推送ViewController,但无法弹出。当我在创建翻转动画后立即弹出控制器时,动画不会运行,它的回调-应该执行[[UIApplication sharedApplication]endIgnoringInteractionEv

我正在尝试实现一个像flip transition这样的iBooks作为故事板。segue应该按resp。将
destinationViewController
弹出到UINavigationControllers堆栈上或从中弹出

我可以在segues
perform
方法中推送ViewController,但无法弹出。当我在创建翻转动画后立即弹出控制器时,动画不会运行,它的回调-应该执行
[[UIApplication sharedApplication]endIgnoringInteractionEvents]
不会被调用,并且我的应用程序结果会失效

因此,我尝试在
animationDidStop:anim:flag
delegate方法中推/弹出,但当flag设置为true时,它从未被调用


我假设segue在委托方法被调用之前被释放。我还能做什么?

如果我完全误解了这个问题,请原谅,但您似乎只想在两个视图控制器之间进行基本的水平来回翻转。即使你已经弄明白了这一点,也许它会帮助其他有同样问题的人

(1) 在故事板(具有ViewController A和B)中,创建从A到B的模式序列。为其指定标识符(ShowViewController B)并选择“过渡:水平翻转”

我们设置了协议和委托:

(2a)在ViewControllerB.h中,在界面上方添加:

@class ViewControllerB;

@protocol ViewControllerBDelegate
    - (void)viewControllerBDidFinish:(ViewControllerB *)controller;
@end
(2b)将委托添加为属性:

@property (weak, nonatomic) id <ViewControllerBDelegate> delegate;
(3b)并在翻转方法中委托:

- (IBAction)flipBack:(id)sender
{
    [self.delegate viewControllerBDidFinish:self];
}
(4) 在ViewControllerA.h中,在最顶端添加
#导入“ViewControllerB.h”
,并在@interface

(5a)在ViewControllerA.m中添加符合协议的方法:

- (void)viewControllerBDidFinish:(ViewControllerB *)controller
{
    [self dismissModalViewControllerAnimated:YES];
}
(5b)然后将其设置为PrepareForegue中的委托人:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([[segue identifier] isEqualToString:@"showViewControllerB"]) {
        [[segue destinationViewController] setDelegate:self];
    }
}

我希望这能回答你的问题。如果我误解了,请告诉我。

你的问题有点让人困惑,因为它混合了弹出、推、翻转和后仰。我不确定ai是否能回答你的问题,但我可以告诉你我做了什么

如果我将viewController推入导航控制器堆栈并将序列图像板Segue样式设置为push,它将从右向左推入视图。此时会出现“后退”按钮,其中显示presentingViewController的标题

如果我将情节提要分段样式设置为“模式”,我可以将过渡设置为“水平翻转”(这似乎是您想要的)。但此时不会出现“后退”按钮。在presentedViewController中,我使用以下命令关闭视图:

[self.presentingViewController dismissViewControllerAnimated:YES completion:nil];
它将右翻转第二个视图

但这是一个肮脏的解决方案,苹果公司不推荐它


Luke Dubert给了您一个如何实现委托的示例。

如果您使用的是故事板,则必须使用iOS5。为什么不使用
UIPageViewController
?它实现了你在iBooks上看到的所有标准页面翻转行为。我不是说pagecurl,而是指从iBooks书架到商店的翻转和向后翻转。基本上,你需要两个视图控制器,它们看起来是“背靠背”的,这样你就可以在同一空间内随意在两个视图控制器之间翻转,而不是在一个堆栈上,一个优先于另一个,是吗?在我100%确定之前,我不会将此作为答案发布,但我想知道是否最好提供这种幻觉(假设您有一个表视图和地图视图。将其中一个作为主视图,使用翻转切换到次视图,并将反向翻转本身设置为“后退”。必须尝试此操作……)
[self.presentingViewController dismissViewControllerAnimated:YES completion:nil];