将视图推送到不在同一视图层次结构中的UINavigationController

时间:2013-09-08 16:40:50

标签: ios objective-c uinavigationcontroller

我有两个表格视图。一个显示项目列表,比如食谱名称。另一个显示带有描述和图像的配方名称。具有更详细视图的那个是导航控制器的一部分,因此点击其中一个项目会在堆栈顶部推送另一个视图。

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

我已经尝试将要推送到堆栈的视图的内容传递到主列表中的方法,但是没有做任何事情。

那么,有没有办法在另一组视图中找到导航控制器,这样我就可以将视图推到它上面了?

1 个答案:

答案 0 :(得分:0)

如果它对您有所帮助,这里有一个解决方法,我曾经从子视图中解除一些推送问题。我使用模态segue,推动画。

您可以将它们称为:[myAnimations modalRight:self destvc:yourDestViewController]。要离开,请从yourDestViewController:[myAnimations modalLeft:self];

myAnimations.h

#import <Foundation/Foundation.h>

@interface myAnimations : NSObject
@end

myAnimations.m

#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

更新:现在使用IOS 7并且它是很好的推动动画,上面的方法会让它看起来很奇怪。如果你想以模态方式呈现一个需要推送东西的viewcotroller(让我们称之为pusherVC),将pusherVC嵌入导航控制器中,并将推模的导航控制器呈现给模态。然后,@ pusherVC你可以做self.nafigationcontroller目前......