我的iPhone应用程序是基于标签栏的,但我想触发一个动作,它完全切换标签栏控制器视图,并用来自不同XIB文件的视图替换窗口中的所有内容。我猜这应该在应用程序委托中完成(因为这是“主要”类),但我不知道从那里开始的正确方法。有谁知道我该怎么办?
提前致谢!
答案 0 :(得分:0)
您的标签视图控制器可以使用它的操作方法,例如-(IBAction)onChangeView
,该方法会调用[[UIApplication sharedApplicaton] delegate]
上的方法,例如-(void)toggleScreen
。
-(IBAction)onChangeView:(id)sender
{
MyAppDelegate *delegate = (MyAppDelegate *)[[UIApplication sharedApplication] delegate];
[delegate toggleScreen];
}
然后在您的app appate方法中执行以下操作:
-(void)toggleScreen
{
[[[window subviews] objectAtIndex:0] removeFromSuperview];
[window addSubview:otherView];
}
但是,如果您需要转换,则可能会有所不同。
答案 1 :(得分:0)
你真的不必一直走到app delegate。您可以轻松删除现有视图和控制器并添加新视图。这确实取决于你在做什么。例如,你可以暂时放下现有的视图结构并使用完全不同的东西,如果你愿意,可以回到最初的方案(虽然我不确定用户体验)。
在我的应用程序中,我通常有一个根视图控制器,或者我使用我的主窗口来添加视图和从中删除视图。某些视图会向其自身添加其他视图或将另一个视图转换到根视图或主窗口。一些观点靠近以显示下面的视图。选项是无限的,取决于您的需求和架构。
答案 2 :(得分:0)
谢谢你们!尼克,这只是我需要的代码。如果有人发现这个方便,这里是我用来添加动画来切换视图的代码。只需将其放在app委托中的方法中:
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];