2009-03-01 78 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