2009-03-01 48 views
2

我发现自己需要从视图访问视图控制器。可可编程的概念或技术问题

这里是方法

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

} 

基本上,我试图写由该根控制器称为换出subviewcontorllers从rootcontrollers观点查看通用视图开关方法。

我通过一个子视图控制器,并能够删除当前子视图。但为了做适当的视图切换动画,我需要访问当前视图视图控制器。这是错误的方法,可以完成吗?

回答

-2

我相信你的方法是错误的。你应该看看我相信的UINavigationController。

+0

他可能不想要一个导航栏(你可以实现视图切换) – hhafez 2009-03-02 00:17:10

+0

你是对的。我确实有错误的做法。基本上我是在与MVC模式作斗争。我仍然试图了解如何在某些情况下应用MVC,但至少可以取得进展! – michael 2009-05-19 17:18:55

0

changeView()方法属于视图控制器。它可以解决你让视图知道控制器(它不应该)的问题,这样做更有意义。

另外,除非你在changeView()中使用UIViewController对象中的方法无法完成的事情,那么你应该直接使用它,如果需要实现自己的视图切换方法,那么你可以扩展UIViewController而不是在你看来实现部分视图控制。

我的2美分:)

1

我增加了一个成员持有到当前子视图控制器(currentController),是指它时,控制器交换完成

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

} 
的rootcontroller