2012-07-25 2 views
1

J'utilise un Segue personnalisé qui ressemble à ceci:iOS: Segue personnalisé et presentViewController ne fonctionne pas comme prévu

@implementation ModalPushSegue

- (void)perform { 
    UIViewController *fromController = self.sourceViewController; 
    UIViewController *toController = self.destinationViewController; 
    UIView *fromView = fromController.view; 
    UIView *toView = toController.view; 

    CGPoint centerStage = toView.centerStage; 
    toView.center = toView.rightStage; 

    [fromView.window addSubview:toView]; 
    [fromController addChildViewController:toController]; 

    [UIView transitionWithView:toView 
         duration:0.5 options:0 
        animations:^{ 
         toView.center = centerStage; 
        } 
        completion:nil]; 

} 

Cela fonctionne bien en ce que la vue est diapositive à partir le droit comme prévu et le contrôleur est ajouté à la hiérarchie du contrôleur.

Mais plus tard dans le contrôleur ajoutai-je faire ceci:

[self presentViewController:anotherController animated:YES completion:nil]; 

j'attendre à ce que le point de vue glisser l'écran ala le style modal du nouveau contrôleur. Mais ce qui se passe à la place est la nouvelle vue n'apparaît pas. Et quand je retire plus tard ce contrôleur, sa vue clignote et glisse hors de l'écran, laissant un fond noir au lieu de la vue qui était à l'origine là.

J'ai joué avec pendant un certain temps et si je change le code pour

//[self presentViewController:oauthController animated:YES completion:nil]; 
[self.view addSubview:oauthController.view]; 
[self addChildViewController:oauthController]; 

Alors la vue apparaît comme prévu, mais pas redimensionnée.

Mon problème semble être lié à la manière dont les segments configurent la hiérarchie par rapport à la façon dont presentViewController fait les choses. J'ai fait beaucoup de lecture et de recherche, mais jusqu'à présent, je n'ai pas pu avoir une idée claire de ce qui se passe exactement.

J'ai également joué avec l'utilisation de presentViewController dans la section, mais au lieu de placer la nouvelle vue sur l'ancienne, l'écran devient noir et la nouvelle vue glisse ensuite.

Toute aide appréciée.

Répondre

1

Définissez un ID Storyboard sur votre contrôleur de vue de destination (dans le story-board), essayez le code suivant:

AnotherController *viewC = [self.storyboard instantiateViewControllerWithIdentifier:@"AnotherController"]; 
ModalPushSegue *segue = [[ZHCustomSegue alloc] initWithIdentifier:@"coolSegueName" source:self destination:viewC]; 

[segue perform]; 
Questions connexes