0

Three20ライブラリを含め、ビューにTTNavigatorを使用しています。

私の目標は、ビュー4からビュー2に戻ることです。

これについて私が見つけた唯一の解決策は、ビュー4でpopViewControllerAnimatedを呼び出してビュー3に到達し、次にビュー3のViewDidAppearでpopViewControllerAnimatedを再度呼び出してビュー2に到達することです。

問題は、もちろん、ViewDidAppearがView4からView3に呼び出された場合にのみ、View 3のViewDidAppearでpopViewControllerAnimatedを呼び出したい場合です(たとえば、View2がView3を開く場合)。

私が見る限り、BOOLプロパティなどを設定する必要がありますが、どのようにしたらよいでしょうか。Three20によって提供されたURLナビゲーションのため、ここではデリゲートを操作できません。

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 に答える