2009-03-01 6 views
2

Ich finde mich in der Ansicht von einem Blick auf einen Viewcontroller von seiner Ansicht.konzeptionelle oder technische Problem mit Cocoa Programmierung

Hier ist die Methode

-(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]; 

} 

Grundsätzlich Ich versuche, eine allgemeine Ansicht Schalter Methode zu schreiben, die von dem Root-Controller zu tauschen subviewcontorllers Blick aus dem rootcontrollers Ansicht aufgerufen wird.

Ich übergeben in einem Subviewcontroller und kann die aktuelle Unteransicht entfernen. Aber um die richtige Ansicht zu erhalten, muss ich auf den aktuellen View-Controller zugreifen. Ist das die falsche Herangehensweise und kann es getan werden?

Antwort

-2

Ich glaube, Ihr Ansatz ist falsch. Du solltest in UINavigationController schauen, glaube ich.

+0

getan wird, könnte er nicht Willst du eine Navigationsleiste (Sie können Ansicht swtiching ohne es implementieren) – hhafez

+0

Sie haben Recht. Ich hatte die falsche Herangehensweise. Im Wesentlichen kämpfte ich gegen das MVC-Paradigma. Ich versuche immer noch zu verstehen, wie man MVC in einigen Fällen anwendet, aber mache wenigstens Fortschritte! – michael

0

Die Methode changeView() gehört in den Viewcontroller. Es würde Ihnen das Problem lösen, die Ansicht zu haben, dass es über den Controller weiß (was es nicht sollte), und es macht mehr Sinn.

Auch wenn Sie etwas Phantasie in changeView() tun, die nicht die Methoden in einem UIViewController Objekt getan werden kann, verwenden, dann sollten Sie es nur, anstatt verwenden, wenn es neccesary ist Ihre eigene Ansicht Vermittlungsverfahren zu implementieren, dann können Sie UIViewController erweitern anstatt einen Teil des View-Controllers aus Ihrer Sicht zu implementieren.

my 2 cents :)

+0

Die changepageview-Methode befindet sich im rootview-Controller. Das Problem ist, dass ich eine Handle für den Viewcontroller, der eine Sicht derzeit auf Index 0 der Ansicht rootviewcontrollers hat, will. Ich habe Zugriff auf die Ansicht bei Index 0, aber nicht auf den View-Controller. – michael

+0

von OP 'Ich versuche, eine allgemeine Ansichtswechselmethode zu schreiben, die vom Root-Controller aufgerufen wird, um Subviewcontorllers-Views aus der rootcontrollers-Ansicht auszulagern.' es sei denn, ich missverstehe Ihre Absicht hinter dieser Funktion, bietet UIViewcontroller diese Funktionalität bereits. – hhafez

1

ich ein Mitglied der rootcontroller, die auf den aktuellen Unter-View-Controller halten (currentController) und bezieht sich auf es, wenn ein Controller Swap

hinzugefügt
-(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; 

} 
Verwandte Themen