0

我已经包含了 Three20 库并使用 TTNavigator 来查看我的视图。

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

我找到的唯一解决方案是在视图 4 中调用 popViewControllerAnimated 以到达视图 3,然后在视图 3 中的 ViewDidAppear 中再次调用 popViewControllerAnimated 以到达视图 2。

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

所以据我所知,我必须设置一个 BOOL 属性或类似的东西,但是如何?由于 Three20 提供的 URL-Navigation,我不能在这里与代表一起工作。

4

2 回答 2

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];
}
于 2011-09-03T11:40:06.083 回答
1

使用单例设计模式怎么样

您可以在其中设置一个布尔值,您可以根据您要从哪个视图进行更改,然后在视图 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;
    }
}

如果代码中存在一些小错误,请原谅我,我真的很快就想到了。

于 2011-09-03T11:15:17.527 回答