Ios 将视图推送到';不在同一视图层次结构中

Ios 将视图推送到';不在同一视图层次结构中,ios,objective-c,uinavigationcontroller,Ios,Objective C,Uinavigationcontroller,我列出了两个表视图。其中一个显示项目列表,比如配方名称。另一个显示配方名称以及说明和图像。具有更详细视图的视图是导航控制器的一部分,因此点击其中一个项目会将另一个视图推到堆栈顶部 问题是,我有一个配方名称列表,点击该列表时,我希望将该配方详细信息推送到导航控制器堆栈中。这两个视图不在同一个视图层次结构中,因此我不能以正常方式推送它 我尝试将视图的内容传递到主列表上的一个方法中,但没有任何效果 那么,有没有一种方法可以在另一组视图中访问导航控制器,以便我可以将视图推送到它上?如果它对您有帮助,下面

我列出了两个表视图。其中一个显示项目列表,比如配方名称。另一个显示配方名称以及说明和图像。具有更详细视图的视图是导航控制器的一部分,因此点击其中一个项目会将另一个视图推到堆栈顶部

问题是,我有一个配方名称列表,点击该列表时,我希望将该配方详细信息推送到导航控制器堆栈中。这两个视图不在同一个视图层次结构中,因此我不能以正常方式推送它

我尝试将视图的内容传递到主列表上的一个方法中,但没有任何效果


那么,有没有一种方法可以在另一组视图中访问导航控制器,以便我可以将视图推送到它上?

如果它对您有帮助,下面是一种解决方法,我用来解决子视图中的一些推送问题。我使用一个模态序列,带有推送动画

您可以这样称呼它们:[myAnimations ModOK:self-destvc:yourDestViewController]。要返回,请从DestViewController:[myAnimations modalLeft:self]

myAnimations.h

#import <Foundation/Foundation.h>

@interface myAnimations : NSObject
@end
#导入
@接口myAnimations:NSObject
@结束
我的动画

#import "myAnimations.h"
#import <QuartzCore/QuartzCore.h>

@implementation myAnimations

+(void) modalRight:(UIViewController*)vc destvc:(UIViewController*)viewCtrl{
    CATransition *transition = [CATransition animation];
    transition.duration = 0.3;
    transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
    transition.type = kCATransitionPush;// kCATransitionMoveIn;
    transition.subtype = kCATransitionFromRight;
    [vc.view.window.layer addAnimation:transition forKey:nil];
    [vc presentModalViewController:viewCtrl animated:NO];
}

+(void) modalLeft:(UIViewController*)vc{
    CATransition *transition = [CATransition animation];
    transition.duration = 0.3;
    transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
    transition.type = kCATransitionPush;
    transition.subtype = kCATransitionFromLeft;
    [vc.view.window.layer addAnimation:transition forKey:nil];
    [vc dismissModalViewControllerAnimated:NO];
}

@end
#导入“myAnimations.h”
#进口
@实现myAnimations
+(void)ModOK:(UIViewController*)vc destvc:(UIViewController*)viewCtrl{
CATTransition*转换=[CATTransition动画];
过渡时间=0.3;
transition.timingFunction=[CamediaTimingFunctionWithName:kCAMediaTimingFunctionEaseInEaseOut];
transition.type=kCATransitionPush;//kCATransitionMoveIn;
transition.subtype=kCATransitionFromRight;
[vc.view.window.layer addAnimation:transition-forKey:nil];
[vc presentModalViewController:viewCtrl动画:否];
}
+(void)modalLeft:(UIViewController*)vc{
CATTransition*转换=[CATTransition动画];
过渡时间=0.3;
transition.timingFunction=[CamediaTimingFunctionWithName:kCAMediaTimingFunctionEaseInEaseOut];
transition.type=kCATransitionPush;
transition.subtype=kCATransitionFromLeft;
[vc.view.window.layer addAnimation:transition-forKey:nil];
[vc解聘Modalviewcontrolleranimated:否];
}
@结束

更新:现在有了iOS7和很好的推送动画,上面的方法会让它看起来很奇怪。如果您想以模态方式呈现需要推送某个内容的viewcotroller(我们称之为PushServc),请将PushServc嵌入导航控制器,并呈现推送器的导航控制器。然后,@pusherVC您可以执行self.nafigationcontroller present…

显示一些代码吗?如果它们不在同一层次结构中,您所做的尝试在概念上不正确,无法将其显示为推送。用模态动画来代替模态演示。谢谢你的回答。最后,我在导航控制器下移动了两个视图,因为这似乎是不可能的。如果我仍然保持现状,你的回答会很有效。