我只是想让我的头绕着iPhone的简单视图切换,并创建了一个简单的应用程序来尝试并帮助我理解它。iPhone视图切换基础
我已经包含了用于切换视图的根控制器中的代码。我的应用程序有一个工具栏,上面有三个按钮,每个按钮链接到一个视图。这是我的代码做到这一点,但我认为最有效的方式来实现这一点?有没有办法找到/删除当前显示的视图,而不是必须执行if语句来查看是否有超类?
我知道我可以使用标签栏来创建类似的效果,但我只是使用这种方法来帮助我练习一些技巧。
-(IBAction)switchToDataInput:(id)sender{
if (self.dataInputVC.view.superview == nil) {
if (dataInputVC == nil) {
dataInputVC = [[DataInputViewController alloc] initWithNibName:@"DataInput" bundle:nil];
}
if (self.UIElementsVC.view.superview != nil) {
[UIElementsVC.view removeFromSuperview];
} else if (self.totalsVC.view.superview != nil) {
[totalsVC.view removeFromSuperview];
}
[self.view insertSubview:dataInputVC.view atIndex:0];
}
}
-(IBAction)switchToUIElements:(id)sender{
if (self.UIElementsVC.view.superview == nil) {
if (UIElementsVC == nil) {
UIElementsVC = [[UIElementsViewController alloc] initWithNibName:@"UIElements" bundle:nil];
}
if (self.dataInputVC.view.superview != nil) {
[dataInputVC.view removeFromSuperview];
} else if (self.totalsVC.view.superview != nil) {
[totalsVC.view removeFromSuperview];
}
[self.view insertSubview:UIElementsVC.view atIndex:0];
}
}
-(IBAction)switchToTotals:(id)sender{
if (self.totalsVC.view.superview == nil) {
if (totalsVC == nil) {
totalsVC = [[TotalsViewController alloc] initWithNibName:@"Totals" bundle:nil];
}
if (self.dataInputVC.view.superview != nil) {
[dataInputVC.view removeFromSuperview];
} else if (self.UIElementsVC.view.superview != nil) {
[UIElementsVC.view removeFromSuperview];
}
[self.view insertSubview:totalsVC.view atIndex:0];
}
}
感谢您的回复。 我认为if语句应该防止每次创建视图,但只有当它不存在时才会创建视图。正如我在didReceiveMemoryWarning中包含了一段代码,它将删除非活动视图,因此如果发生这种情况,则需要创建一个新视图,并且如果用户从未点击其中一个视图,则需要创建一个延迟加载的形式那么它将永远不会被加载。那样有用吗? 我喜欢你在那里做的很整齐,但它会不会因为同时加载所有三个视图而导致记忆惩罚? 谢谢 – 2010-03-26 16:56:55
如果你想让你的代码与didReceiveMemoryWarning一起工作,那么在每个IB动作中包含你的延迟加载代码,而不是像我所做的那样在init方法中。关于你的代码丑陋的东西是removeFromSuperview调用 – pheelicks 2010-03-26 17:03:54