presentModalView не отображается при вызове внутри делегата - PullRequest
0 голосов
/ 09 июня 2011

У меня есть UIViewController, называемый MainViewController (он внутри навигационного контроллера). У меня есть другой UIViewController под названием OptionsViewController. Внутри OptionsViewController у меня есть кнопка выхода из системы, и при нажатии она вызывает делегата в MainViewController:

- (IBAction) logout:(id)sender
{
    [self.delegate viewController:self loginSuccess:YES]; //calls this delegate

    NSUserDefaults *standardDefaults = [NSUserDefaults standardUserDefaults];
    NSString * username = [standardDefaults stringForKey:@"kApplicationUserNameKey"]; 
    NSError * error = nil;

    [standardDefaults removeObjectForKey:@"kApplicationUserNameKey"];
    [SFHFKeychainUtils deleteItemForUsername:username andServiceName:@"convore" error:&error];
    [self dismissModalViewControllerAnimated:YES];
}

Делегат, вызываемый в MainViewController:

- (void) viewController:(OptionsViewController*)viewCon loginSuccess:(BOOL)loadFlag
{
    if (loadFlag){
        LoginViewController* lvc = [[LoginViewController alloc] init];
        lvc.delegate = self;
        [self.navigationController presentModalViewController:lvc animated:YES];
          //this same code works in the viewDidLoad (it presents the LoginViewController, but not here)
        [lvc release];

        [self.groups removeAllObjects];
        [self.table reloadData];

        Topic * topic = [Topic object];
        topic.tid = [NSNumber numberWithInt:-2];
        self.detailViewController.topic = topic;
        self.detailViewController.detailItem = topic.tid;
    }
}

Проблема в том, что когда вызывается этот делегат, он должен представлять LoginViewController (как видно из кода выше), однако это не так. Я попытался поместить код presentModalViewController в делегат внутри viewDidLoad MainViewController, и он обнаруживается, но при попытке показать его в этом делегате - нет. Почему это? И да, я проверил, что делегат вызывается (попытался поместить NSLog внутри делегата)

UPDATE:

OptionsViewController отображается как modalViewController, а также следующий код из MainViewController:

- (IBAction)showOptions:(id)sender
{
    if ([self.detailViewController.message isFirstResponder])
        [self.detailViewController setViewMovedUp:NO];


    OptionsViewController * opt = [[OptionsViewController alloc] init];
    opt.delegate = self;
    opt.mgvc = self;
    UINavigationController * uinc = [[UINavigationController alloc] initWithRootViewController:opt];
    uinc.navigationBar.tintColor = [UIColor blackColor];
    uinc.modalPresentationStyle = UIModalPresentationFormSheet;
    uinc.title = @"";
    uinc.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;  //transition shouldn't matter
    [self presentModalViewController:opt animated:YES];

    float xCenter = 384;
    float yCenter = 512;
    if (self.splitViewController.interfaceOrientation == UIInterfaceOrientationPortrait || self.splitViewController.interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown){
        xCenter = 384;
        yCenter = 512;
    } else if (self.splitViewController.interfaceOrientation == UIInterfaceOrientationLandscapeLeft || self.splitViewController.interfaceOrientation == UIInterfaceOrientationLandscapeRight){
        xCenter = 512;
        yCenter = 384;
    }

    uinc.view.superview.frame = CGRectMake(0, 0 , 318, 209);//it's important to do this after presentModalViewController
    uinc.view.superview.center = CGPointMake(xCenter, yCenter);
    [opt release];

}

Когда я пытаюсь просто показать OptionsViewController (без UINavigationController, все работает нормально). Почему это?

1 Ответ

0 голосов
/ 09 июня 2011

Вы уверены, что ваш взгляд находится внутри контроллера навигации?Если нет, измените строку на:

[self presentModalViewController:lvc animated:YES];
...