Как получить возвращаемое значение из ViewController?// popViewControllerAnimated дважды?Двойной назад? - PullRequest
0 голосов
/ 03 сентября 2011

Я включил библиотеку Three20 и использую TTNavigator для своих просмотров.

Моя цель - переключиться с просмотра 4 обратно на просмотр 2.

Единственное решение, которое я нашел для этого, - это вызвать popViewControllerAnimated в View 4, чтобы перейти к View 3, затем в ViewDidAppear в представлении 3 снова вызвать popViewControllerAnimated, чтобы перейти к View 2.

Проблема, конечно, в том, что я хочу вызывать popViewControllerAnimated только в View 3, только ViewDidAppear, когда ViewDidAppear вызывается из View 4 в View 3, но не в других случаях (например, View 2 открывает View 3).

Итак, насколько я вижу, мне нужно установить свойство BOOL или что-то вроде этого, но как? Я не могу работать с делегатами здесь из-за URL-навигации, предоставленной Three20.

Ответы [ 2 ]

3 голосов
/ 03 сентября 2011

Использование 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 голос
/ 03 сентября 2011

Как насчет использования шаблона проектирования 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;
    }
}

Простите, если в коде есть какая-то небольшая ошибка, я сделал это очень быстро.

...