Iphone UIView切换:上一个视图的子视图污染新切换到的视图

时间:2011-05-18 13:50:32

标签: iphone objective-c ios uiview

我现在已经工作了一段时间来切换UIViews,我正在尝试一个基本的UIView开关,而不使用UINavigationController。我已经研究过UINavigationControllers了,但是我已经和下面的人搏斗了很长时间以至于我想完全探索它。

我的项目组织是:

MainViewController.h/.m    -> viewDidLoad: This method runs a NSTimer to update self.view with a few bits and bobs.

ConfigView.h/.m: -> viewDidLoad: nothing - just an idle view.  

MainViewController.xib     -> Main window NIB

ConfigView.xib   -> ConfigView NIB

我在MainViewController.m中有以下方法在UIButton按事件上执行:

- (IBAction)switchToConfigView:(id)sender {

if(self.configViewController == nil) {
    ConfigView *cv = [[ConfigView alloc] initWithNibName:@"ConfigView" bundle:nil];
    self.configViewController = cv;
    [cv release];
}

[self.view addSubview:configViewController.view];

}

现在,当我切换到ConfigView时,确实显示了视图,但是看起来仍然执行来自MainViewController的viewDidLoad:导致两个视图有效地合并。从代码中,我可以看到显然是这种情况,因为实际的视图切换本身是在MainViewController上下文中执行的,正如您所看到的,只是一个子视图。

我的问题是,当通过添加另一个子视图来切换视图时,如何整齐地收集/暂停MainViewController中的所有内容?我的猜测是,这是不可能的,或者更确切地说是一些其他方法可以更好地应用的大量工作。我怀疑我需要从ConfigView.h / .m实现实际的切换,但我可能是错的。

你可以对上面所说的任何亮点都是盛大的。

感谢

swisscheese。

3 个答案:

答案 0 :(得分:1)

相信我在另一个视图上添加一个全新的子视图真的是一项艰巨的任务,后来当项目变大时,切换视图变得很痛苦。

这是我个人的经历,因为我在之前的一个项目中犯了这个大错误。

在所有情况下,导航控制是切换视图而不是添加子视图的最佳选择。

请告诉我你在导航控制中遇到了什么困难,我可以帮忙解决这个问题。

谢谢,

答案 1 :(得分:1)

我的建议是:

1)有一个基本的空视图;

2)添加一个子视图;这将是你实际的第一个观点;

3)当你想要切换时,从基本视图中删除第一个子视图,并将第二个子视图添加为子视图;

4)当您想要切换回来时,删除第二个并将第一个作为子视图添加到基本视图中;

您可以轻松处理任意数量的视图。它有效。

或者,您可以隐藏视图而不是删除视图。

答案 2 :(得分:0)

如果您在MainViewController的viewDidLoad方法中设置的NSTimer正在使用addSubview方法将子视图添加到mainViewController的视图中,那么这些视图将放在所有其他子视图的顶部,即顶部配置视图。因此,您可以尝试在显示配置视图时使计时器失效。

您应该只使用UINavigationController,或使用presentModalViewControllerAnimated显示配置视图控制器。你为什么不想?