question conceptuelle ou technique avec la programmation Cocoa

voix
2

Je me trouve dans le besoin d'accès à un viewcontroller de son point de vue.

Voici la méthode

-(void)changePageView:(UIViewController*)newviewcont withtransitiontype:(int)t andtransitionspeed:(int)s
{
    //Remove whatever view is currently loaded at index 0, this index is only to be used by page views
    UIView *oldview = [self.view.subviews objectAtIndex:0];

    [UIView beginAnimations:@View Flip context:nil];
    [UIView setAnimationDuration:s];
    [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
    [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:self.view cache:YES];
    [newviewcont viewWillAppear:YES];
    //[oldview viewWillDisappear:YES];
    [oldview removeFromSuperview];
    [self.view insertSubview:newviewcont.view atIndex:0];
    //[oldview viewDidDisappear:YES];
    [newviewcont viewDidAppear:YES];

}

En fait, je suis en train d'écrire une méthode de commutation de vue générique qui est appelé par le contrôleur racine d'échanger les vues subviewcontorllers de la vue rootcontrollers.

Je passe dans un subviewcontroller et je suis en mesure d'éliminer la sous-vue actuelle. Mais pour faire de l'animation de commutation correcte vue i besoin d'accéder au contrôleur actuel de vue vues. Est-ce une mauvaise approche et peut-il être fait?

Créé 02/03/2009 à 00:57
source utilisateur
Dans d'autres langues...                            


3 réponses

voix
1

J'ajouté un élément à la rootcontroller qui maintiennent sur le contrôleur secondaire d'affichage actuel (currentController) et se réfère à elle lors d'un échange de contrôleur est fait

-(void)changePageView:(UIViewController*)newviewcont withtransitiontype:(int)t andtransitionspeed:(int)s
{


    [UIView beginAnimations:@"View Flip" context:nil];
    [UIView setAnimationDuration:s];
    [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
    [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:self.view cache:YES];
    [newviewcont viewWillAppear:YES];
    [self.currentController viewWillDisappear:YES];
    [self.currentController.view removeFromSuperview];
    [self.view insertSubview:newviewcont.view atIndex:0];
    [self.currentController viewDidDisappear:YES];
    [newviewcont viewDidAppear:YES];
    [UIView commitAnimations];


    self.currentController = newviewcont;

}
Créé 02/03/2009 à 02:21
source utilisateur

voix
0

La changeView()méthode appartient à la viewcontroller. Il vous résoudre le problème d'avoir la vue de savoir au sujet de son contrôleur ( ce qui ne devrait pas) et il est plus logique.

En outre , sauf si vous faites quelque chose de fantaisie dans changeView()qui ne peut être fait en utilisant les méthodes dans un UIViewControllerobjet , alors vous devriez simplement l' utiliser à la place, si elle est neccesary à mettre en œuvre votre propre méthode de commutation de vue, vous pouvez étendre UIViewController au lieu de implemtning une partie de la vue controlelr dans votre vue.

mes 2 cents :)

Créé 02/03/2009 à 01:16
source utilisateur

voix
-2

Je crois que votre approche est erronée. Vous devriez regarder dans UINavigationController je crois.

Créé 02/03/2009 à 01:09
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more