如何从ViewController获取返回值? // popViewControllerAnimated两次?双背?

时间:2011-09-03 11:11:15

标签: iphone ios three20 popviewcontrolleranimated

我已经收录了Three20图书馆,并使用TTNavigator查看我的观点。

我的目标是从视图4翻到视图2.

我找到的唯一解决方案是调用View 4中的popViewControllerAnimated进入View 3,然后在View3中的ViewDidAppear中再次调用popViewControllerAnimated,进入View 2。

问题是,当然,我只想在View3中调用viewViewDtrollerAnar,当ViewDidAppear从View 4调用到View 3时,而不是在其他情况下调用(例如View 2打开View 3)。

因此,据我所知,我必须设置一个BOOL属性或类似的东西,但是如何? 我不能在这里与代表合作,因为Three20提供了URL导航。

2 个答案:

答案 0 :(得分:3)

使用UINavigationController-popToViewController:animated:方法:

// This is a method of your UIViewController subclass with view 4
- (void) popTwoViewControllersAnimated:(BOOL)animated {
    NSInteger indexOfCurrentViewController = [self.navigationController.viewControllers indexOfObject:self];
    if (indexOfCurrentViewController >= 2)
        [self.navigationController popToViewController:[self.navigationController.viewControllers objectAtIndex:indexOfCurrentViewController - 2] animated:animated];
}

答案 1 :(得分:1)

如何使用Singleton设计模式

您可以在那里设置一个bool,您可以根据您要来的视图进行更改,然后在视图3中检查该值是什么。在我看来,这是在不使用代理的情况下最简单的方法

.h文件

@interface Singleton : NSObject
{
     BOOL flag;
}

@property(nonatomic) BOOL flag;
@end


.m file

static Singleton *instance = nil;
@implementation Singleton
@synthesize flag;
+(id) sharedManager
{
    @synchronized(self){
        if(instance == nil)
             instance = [[super allocWithZone:NULL] init];
    }
    return instance;
}

+(id)allocWithZone:(NSZone *)zone
{
    return [[self sharedManager] retain];
}

-(id) copyWithZone:(NSZone *)zone
{
    return self;
}

-(id) retain
{
    retrun self;
}

-(unsigned) retainCount
{
    retrun 1;
}

-(id)  init
{
    if(self == [super init])
    {
        flag = NO;
    }
}

请原谅我,如果代码中有一些小错误,请快速实现我的头脑。