English 中文(简体)
Cocoa编程的概念或技术问题
原标题:
  • 时间:2009-03-01 23:57:41
  •  标签:

我发现我需要从其视图访问一个视图控制器。

这里是方法。

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

}

基本上,我正在尝试编写一个通用的视图切换方法,由根控制器调用,以从根控制器的视图中交换子视图控制器的视图。

我传递一个子视图控制器,并且能够移除当前的子视图。但是为了做正确的视图切换动画,我需要访问当前视图的视图控制器。这种做法是错误的吗?它可行吗?

问题回答

我已经将一个成员添加到了根控制器中,它持有当前的子视图控制器(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;

}

changeView()方法应该放在视图控制器中。这将解决视图了解自己的控制器(它不应该这样做)的问题,并且更有意义。

除非您在changeView()中正在进行某些无法使用UIViewController对象中的方法完成的复杂操作,否则您应该直接使用它。如果需要实现自己的视图切换方法,则可以扩展UIViewController,而不是在视图中实现部分视图控制器。

我的两分钱 :)

我相信你的方法是错误的。我相信你应该研究一下UINavigationController。





相关问题
热门标签