Iphone UIView 切换 : Previous view's subviews polluting newly switched-to view

标签 iphone objective-c ios uiview

我已经在切换 UIView 方面工作了一段时间,并且正在尝试一个基本的 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 时, View 确实显示了,但 viewDidLoad: from MainViewController 似乎仍在执行,导致两个 View 有效合并。从代码中,我可以看出情况显然如此,因为实际的 View 切换本身是在 MainViewController 上下文中执行的,正如您所见,只是一个 subview 。

我的问题是,在通过向其中添加另一个 subview 来切换 View 时,如何巧妙地隐藏/暂停 MainViewController 中的所有操作?我的猜测是这是不可能的,或者更确切地说,需要大量的腿部工作才能更好地应用其他一些方法。我怀疑我需要从 ConfigView.h/.m 实现实际的切换,但我可能错了。

如果您能对上述内容有所启发,那就太棒了。

谢谢

瑞士奶酪。

最佳答案

我的建议是:

1) 有一个基本的、空的 View ;

2) 为其添加一个 subview ;这将是您实际的第一个 View ;

3)当你想切换时,从基础 View 中移除第一个 subview ,并添加第二个作为 subview ;

4) 当你想切换回去时,移除第二个并将第一个作为 subview 添加到基础 View 中;

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

或者,您可以隐藏 View 而不是删除它。

关于Iphone UIView 切换 : Previous view's subviews polluting newly switched-to view,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6045821/

相关文章:

ios - 使用滑动手势在标签栏之间导航

objective-c - 如果我写一个自定义属性的getter方法,如果getter通过访问另一个对象的值返回一个值,KVO是否仍然运行?

iphone - 将 UILabel 与另一个 UILabel 一起推送

swift - AVPlayerViewController 视频适用于 iOS 11、12,但不适用于 iPhone 11 的 iOS 13

在 Eclipse IDE 上开发 Iphone 应用程序?

ios - 检查 Objective-C 框架支持的架构

iphone - UIPageControl ,白点未突出显示

objective-c - 在 Mac OS 编程中,默认值是什么?非原子的还是原子的?

ios - UICollectionView + SDWebImage + 单元格重用

ios - 从 View Controller 隐藏 tabBarController 上的选项卡