Cocoa编程的概念或技术问题

时间:2009-03-01 23:57:42

标签: ios objective-c cocoa cocoa-touch

我发现自己需要从视图中访问viewcontroller。

这是方法

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

}

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

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

3 个答案:

答案 0 :(得分:1)

我在root控制器中添加了一个成员,该成员保存在当前子视图控制器(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;

}

答案 1 :(得分:0)

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

除非你在changeView()中做一些使用UIViewController对象中的方法无法完成的事情,否则你应该只使用它,如果有必要实现你自己的视图切换方法然后你可以扩展UIViewController,而不是在你的视图中实现视图控制器的一部分。

我的2美分:)

答案 2 :(得分:-2)

我相信你的做法是错误的。您应该查看我相信的UINavigationController。