我发现自己需要从视图中访问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视图。
我传入一个子视图控制器,并能够删除当前的子视图。但是为了做正确的视图切换动画,我需要访问当前的视图视图控制器。这是错误的做法吗?可以吗?
答案 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。