Запретить изменение view-контроллера Tabbar с помощью UIAlertView - PullRequest
1 голос
/ 22 июня 2011

Я пытаюсь сделать так, чтобы, когда пользователь нажимал элемент панели вкладок, вызывался UIAlertView, спрашивая, действительно ли он хочет изменить фактическую вкладку, проблема в том, что UIAlertView не останавливает код до получения ответа,код продолжает работать и в зависимости от предыдущего значения меняет viewcontroller или нет, а не фактический.

Я пытался ждать ответа некоторое время, но экран только темнеет, а предупреждение ненеожиданно возникнуть.Я также читал этот пост приостановить выполнение кода до UIAlertview , я пытался, но я не смог заставить его работать, может кто-то помочь, спасибо!

- (BOOL) tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController{

if (([self Myfunction]) && (viewController != [tabBarController.viewControllers objectAtIndex:0])){
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"text1" message:@"text2" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"OK", nil];
    [alert show];
    [alert release];

    return boolean_var;
}

return YES;}

- (void)alertView:(UIAlertView *)alert clickedButtonAtIndex:(NSInteger)buttonIndex{
if (buttonIndex == 0) [self setBoolean_var:NO];
else [self setBoolean_var:YES];}

1 Ответ

3 голосов
/ 22 июня 2011
- (BOOL) tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController {
    if ( !([self Myfunction]) || (viewController == [tabBarController.viewControllers objectAtIndex:0])) {
        return YES;
    }

    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"text1" message:@"text2" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"OK", nil];
    [alert show];
    [alert release];

    candidateViewController = viewController; // `candidateViewController` must be declared as an instance variable.

    return NO;
}

Укажите, для какого контроллера просмотра необходимо отобразить предупреждение, и сохраните его в candidateViewController и верните NO, чтобы отложить переключение.Основываясь на ответе в представлении предупреждений, вы должны изменить его.

- (void)alertView:(UIAlertView *)alert clickedButtonAtIndex:(NSInteger)buttonIndex {
    if (buttonIndex != 0)
        self.tabBarController.selectedViewController = candidateViewController;
}

Последний метод предполагает несколько вещей.На ваш контроллер панели вкладок ссылается self.tabBarController, и вы устанавливали boolean_var, чтобы вернуть его к более раннему методу.В этом методе представление предупреждений не блокируется, поэтому использование boolean_var бессмысленно.

...