通过UIViewControllers / UIView代码和概念问题

时间:2011-08-27 04:35:48

标签: ios uiview uiviewcontroller

下面是代码,但这也是一个概念性问题。问题:以下方法是否以正确的方式通过视图控制器?这很广泛,所以让我补充一些具体细节。

假设您在View A中。此视图显示了转到View B或View C的选项。用户做出选择后(i)我想加载新视图和(ii)用户不会回到View A.(另外,顺便说一下,View A是我最初的rootViewController。)

所以,假设我在视图A中连接两个按钮,每个按钮加载其各自的视图。这是一种有效/可行的方法:

- (IBAction)loadViewB:(id)sender
{
    ViewBController *viewBController = [[ViewBController alloc] initWithNibName:Nil bundle:Nil];
    [self.view.superview insertSubview:viewBController.view atIndex:0];
    [self.view removeFromSuperview];
}   


- (IBAction)loadViewC:(id)sender
{     
    ViewCController *viewCController = [[ViewCController alloc] initWithNibName:Nil bundle:Nil];
    [self.view.superview insertSubview:viewCController.view atIndex:0];
    [self.view removeFromSuperview];
}

“insertSubview:atIndex:”方法似乎是正确的,基于Apple's View Controller Programming Guide。此外,代码工作。但是我应该调用“removeFromSuperview”吗?或者我应该把它们堆叠起来? (如果有人对记忆管理有任何意见,我会全力以赴。)

另外:

  1. 我不想浏览结构化数据。所以,似乎没有使用UINavigationController是对的。
  2. 我不想暂时中断流程。所以,打一个模态视图。
  3. 我知道这是一个简单的问题,但我只想确保我对文档的理解是正确的,并且一般都掌握了这个概念。

    提前谢谢。

1 个答案:

答案 0 :(得分:1)

我认为你的方法没有任何问题。请注意,简单[self.view removeFromSuperview]可能不会导致任何内存被释放,例如,如果您的应用程序委托持有对根视图控制器的引用。将此视图切换职责交给app委托可能是个好主意,因此它可以根据需要选择释放对根视图控制器的引用。