Как отклонить несколько presentModalViewControllers и вернуться к корневому контроллеру панели вкладок? - PullRequest
4 голосов
/ 25 апреля 2011

У меня есть приложение, которое отображает presentModalViewController при запуске.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    

    // Override point for customization after application launch.

    // Add the tab bar controller's view to the window and display.
    [self.window addSubview:tabBarController.view];
    Overview *overviewViewController = [[Overview alloc] initWithNibName:@"Overview" bundle:nil];
    [self.tabBarController presentModalViewController:overviewViewController animated:YES];
    [overviewViewController release];
    [self.window makeKeyAndVisible];
    return YES;
}

Как только OverviewController отображается, пользователь получает возможность войти в систему или зарегистрироваться.Если они выбирают имя входа, то я использую другой presentModalViewController, который позволяет им войти в систему:

  -(IBAction) btnLoginPressed{

//  [self dismissModalViewControllerAnimated:YES];
    Login *loginOverView = [[Login alloc] initWithNibName:@"Login" bundle:nil];
    [self presentModalViewController:loginOverView animated:YES];
    [loginOverView release];


}

Однако при успешном входе в систему я хочу, чтобы оба элемента presentModalViewController исчезли, что позволило мне вернуться к корневому контроллеру, которыйконтроллер панели вкладок.

Я пытался сделать следующее, но это не работает:

-(IBAction) btnSubmitLoginPassword{

    //make web service call
//  [self dismissModalViewControllerAnimated:YES];
    [self.tabBarController dismissModalViewControllerAnimated:YES];
}

Теперь в моем поиске по Google я наткнулся на концепцию делегатов, с которой я не знаком.Может кто-нибудь найти время, чтобы помочь мне в моей дилемме.

Заранее спасибо

Ответы [ 2 ]

2 голосов
/ 25 апреля 2011

Контроллеры представления организованы в стек.Вы используете UINavigationController методы popToRootViewControllerAnimated: или popToViewController: animated: для управления количеством представлений, которые выскочат из верхней части стека.

Вы можете попасть в экземпляр UINavigationController через своего делегата приложения.

Чтобы подключить все контроллеры представления к корневому контроллеру представления: (я думаю, это то, о чем вы спрашиваете)

UIApplicationDelegate* delegate = [[UIApplication sharedApplication] delegate];
[delegate.navigationController popToRootViewControllerAnimated:YES];

Чтобы вставить все контроллеры представления в известный контроллер представления в стеке:

UIApplicationDelegate* delegate = [[UIApplication sharedApplication] delegate];
[delegate.navigationController popToViewController:popToViewController animated:YES];
1 голос
/ 25 апреля 2011

Добавьте id delegate; и @property (nonatomic, retain) id delegate; в свой файл Overview.h. Добавьте @synthesize delegate в свой Overview.m. Затем добавьте следующее после вашего initWithNibName:bundle:

[overviewViewController setDelegate: self];

Сделайте то же самое для своего класса Login: Добавьте id delegate; и @property (nonatomic, retain) id delegate; в свой Login.h. Добавьте @synthesize delegate в свой Login.m. Затем добавьте следующее после вашего initWithNibName:bundle:

[overviewViewController setDelegate: self];

Добавьте следующий метод в свой файл Overview.m:

- (void)dismissLoginView {
    [self dismissModalViewControllerAnimated: NO];
    [delegate dismissModalViewControllerAnimated: YES];
}

Измените -(IBAction) btnSubmitLoginPassword на

-(IBAction) btnSubmitLoginPassword {
    [delegate dismissLoginView];
}

Я не проверял это. Надеюсь это работает! Дайте мне знать, когда нет.

...