【发布时间】:2009-09-25 04:27:36
【问题描述】:
我的 iPhone 应用程序是基于标签栏的,但我想触发一个操作,它完全切换标签栏控制器视图并用来自不同 XIB 文件的视图替换窗口中的所有内容。我猜这必须在应用程序委托中完成(因为这是“首席”类),但我不知道从那里去的正确方法。有谁知道如何做我想做的事?
提前致谢!
【问题讨论】:
标签: iphone uitabbarcontroller xib
我的 iPhone 应用程序是基于标签栏的,但我想触发一个操作,它完全切换标签栏控制器视图并用来自不同 XIB 文件的视图替换窗口中的所有内容。我猜这必须在应用程序委托中完成(因为这是“首席”类),但我不知道从那里去的正确方法。有谁知道如何做我想做的事?
提前致谢!
【问题讨论】:
标签: iphone uitabbarcontroller xib
您的标签视图控制器可以有它的操作方法,例如-(IBAction)onChangeView,并且该方法调用[[UIApplication sharedApplicaton] delegate] 上的方法,例如-(void)toggleScreen。
-(IBAction)onChangeView:(id)sender
{
MyAppDelegate *delegate = (MyAppDelegate *)[[UIApplication sharedApplication] delegate];
[delegate toggleScreen];
}
然后在您的应用委托方法中执行以下操作:
-(void)toggleScreen
{
[[[window subviews] objectAtIndex:0] removeFromSuperview];
[window addSubview:otherView];
}
但是,如果您需要过渡,可能会有所不同。
【讨论】:
您实际上不必一直到应用程序委托。您可以轻松删除现有视图和控制器并添加新视图。这确实取决于你在做什么。例如,您可以暂时搁置现有的视图结构并采用完全不同的方式,如果您愿意,可以返回原始方案(不过我不确定用户体验)。
在我的应用程序中,我通常有一个根视图控制器,或者我使用我的主窗口来添加视图和从中删除视图。一些视图会将其他视图添加到自己或将另一个视图转换到根视图或主窗口。一些视图会自行关闭以显示下面的视图。选项是无限的,取决于您的需求和架构。
【讨论】:
谢谢各位!尼克,这正是我需要的代码。如果有人觉得这很方便,这是我用来添加动画以切换视图的代码。只需将其放入应用委托的方法中即可:
AnotherViewController *anotherViewController = [[AnotherViewController alloc] initWithNibName:@"AnotherView" bundle:nil];
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:1.0];
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:self.window cache:YES];
[[[window subviews] objectAtIndex:0] removeFromSuperview];
[window addSubview:[anotherViewController view]];
[UIView commitAnimations];
【讨论】: