Question

Je ne parviens pas à obtenir le -dismissModalViewControllerAnimated: travailler sur l'iPad (comme une application iPhone). Pour une raison quelconque, il ne semble pas faire quoi que ce soit.

J'appelle -presentModalViewController: animation: MainViewController, après que je l'ai essayé d'appeler -dismissModalViewController du contrôleur de vue présenté (en utilisant [auto dismissModalViewController ] ), que je comprends avant la demande au MainViewController. J'ai aussi essayé d'installer un délégué dans le contrôleur de vue présenté ( viewControllerAboutToBePresented.delegate = auto; ), puis appeler [self.delegate dismissModalViewController: OUI] . Aucune approche ne semble rien faire quand je lance l'application iPhone sur l'iPad.

Comment puis-je rejeter le contrôleur modal de vue sur l'iPad?

Était-ce utile?

La solution

J'ai eu ce la première fois que je porté un projet iPhone à l'iPad - il était [self dismissModalViewControllerAnimated:] qui périclite doucement. Le projet utilisait les contrôleurs de vue Cocoa sur un fond OpenGL, et je pensais qu'il était quelque chose à voir avec cela.

En raison du délai ridiculement serré, je n'avais pas le temps de comprendre ce qui se passait, et je viens d'ajouter le point de vue modal comme un sous-vue du contrôleur de vue actuel, et retiré quand je fait. (Ouais, un hack, mais c'est des échelles de temps pour toi ...)

Autres conseils

Je woud poster ce commentaire comme, mais je suis incapable de le faire.

Le contrôleur principal de vue qui devrait appeler dismissModelViewControllerAnimated: . Vous pouvez soit appeler [[self parentViewController] dismissModalViewControllerAnimated:] dans le contrôleur de vue présenté ou définir une méthode dans un protocole qui rejette le contrôleur modal de la vue et la mise en œuvre du protocole dans le contrôleur principal de vue, définir comme le délégué du contrôleur de vue présenté et appeler la méthode de celui-ci. Vous le faites dans le mauvais sens. Il pourrait ou ne pourrait pas résoudre votre problème.

Mise à jour (exemple de code ne sont pas disponibles sur les commentaires):

Sur la MainViewController vous devriez avoir quelque chose comme ceci

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

    // In this case is inside a tableviewmethod, but it could really be an action associated with a button.

    DetailViewController *controller = [[DetailViewController alloc]initWithNibName:@"DetailViewController" bundle:[NSBundle mainBundle]];
    [controller setDelegate:self]; // The delegate is the parent and is assigned, not retained.

    // Modal presentation style is only used on iPad. On iPhone is always full screen.
    // [controller setModalPresentationStyle:UIModalPresentationFullScreen];

    [controller setModalTransitionStyle:UIModalTransitionStyleFlipHorizontal];
    [self presentModalViewController:controller animated:YES];
    [controller release]; // It will be deallocated upon dismissal.
}

-(void)dismissDetailViewControllerAndProcessData:(NSDictionary *)data {

    // Do something with the data passed.
    [self processData:data];

    // Dismiss the modalviewcontroller associated with this viewcontroller.
    [self dismissModalViewControllerAnimated:YES];
}

alors que sur le contrôleur de vue détaillée présentée en tant que contrôleur modal, la seule chose nécessaire est quelque chose comme ceci

-(void)actionBack:(id)sender {

    // Call the delegate method. If you just need to dimiss the controller, just
    // call
    // [[self parentViewController]dismissModalViewControllerAnimated:YES];
    // and don't even bother to set up a delegate and a delegate method.

    [delegate dismissDetailViewControllerAndProcessData:nil]; // Call the parent dismissal method.
}

mais si l'application fonctionne bien sur l'iPhone, il devrait fonctionner tout aussi bien sur l'iPad comme application iPhone.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top