一种简单,干净的切换/交换视图的方法?

时间:2011-02-13 03:37:19

标签: iphone objective-c ios4

我看过几个来源,但我仍然很困惑!我想创建一个具有多个视图的应用程序(只是标准视图,没有表视图或任何东西),我可以从中单击每个视图上的按钮来访问其他视图。

我已经看到了几种方法,但是唯一对我有意义的方法是让应用程序委托负责交换视图。我甚至不确定我的代码是否正确清理了它正在交换的视图的内存!

是否有一种更清晰,更简单的方法来切换视图(我不关心动画)而不是使用委托?

我也看过presentModalViewController,但这似乎有点无组织。 (例如,如果您有多个视图呈现模态,您如何轻松地告诉最新视图关闭所有视图到根)。

还创建了一个基于窗口的应用程序并使用该窗口来添加addSubView和removeFromSuperview,但是如何在委托方法中创建额外的,繁琐的编码来检测删除的视图以及新的应该添加视图?我至少找不到addViewToSuperview方法。

所以请分享你们如何交换意见,以及对你们系统的好处。

说话真的很慢,因为在交换视图时我觉得很慢!

感谢您的时间!

1 个答案:

答案 0 :(得分:3)

如果您了解视图背后的概念,处理多个视图非常容易。例如,您的Delegate可以链接到空父视图。然后,您只需创建子视图,并使用 addSubview 将其添加到父视图中。最后添加的视图是将在前景中显示的视图。

现在,您可以使用 bringSubviewToFront 方法将视图置于最前面。请注意,您的所有观看次数都会保留在内存中,直到您使用子视图的 removeFromSuperview 方法将其从父视图中删除。

交换视图只是在添加下一个视图之前删除子视图,但是你必须决定是否要保留它们,或者如果你想要释放它们,那么你需要* 重新创建(alloc / init)以后的视图。

BTW如果您的视图不在正确的位置,那么您需要调整相对于父视图的位置,或者在界面构建器中将它们设置为正确,因为iOS不会重新定位它们,因为您将它们添加为子视图。

例如,我使用该代码在显示广告或代码的视图之间切换:

- (void) showAds:(BOOL)flag {
if( showAds != flag ) {
    while([[self.bottomView subviews] count] > 0 ) {
        [[[self.bottomView subviews] objectAtIndex:0] removeFromSuperview];
    }
    showAds = flag;
    if( showAds ) {
        [self.tickerViewController stop];
        [self.bottomView addSubview:self.adViewController.view];
    } else {
        [self.bottomView addSubview:self.tickerViewController.view];
        [self.tickerViewController start];
    }
}}

如果没有任何改变,第二行确保我不删除并添加。接下来的3行删除任何残留的子视图。之后,将Add或Ticker视图添加为我当前的子视图(包括确保正确启动/停止代码)。

希望有所帮助。