将控制器添加为从子视图打开的子控制器

时间:2013-04-10 06:43:09

标签: ios objective-c uiviewcontroller

我正在使用最新的SDK开发iOS 5.0+应用程序。

我有一个视图控制器及其视图( VC1 )。在此视图中,我有一个自定义子级UIView view2 )。

从这个子视图我将打开另一个视图控制器( VC2 ),我想将 VC2 添加为 VC1的子控制器,但我不知道该怎么做。

现在,在 view2 上,我有这个方法:

- (void) handleLongClick:(UILongPressGestureRecognizer *)gestureRecognizer
{
    SettingsDialogViewController* dialog = [[SettingsDialogViewController alloc] initWithNibName:@"GaugeSettingsDialogViewController" bundle:nil];

    dialog.view.frame = self.superview.superview.bounds;
    [self.superview.superview addSubview:dialog.view];
}

但如果我这样做,dialog将被释放,我不想添加一个实例变量,因为它一直在内存中。

如何将VC2添加为VC1的子控制器?

1 个答案:

答案 0 :(得分:0)

  

但如果我这样做,对话框将被释放,我不想添加实例变量,因为它每次都会在内存中。

即使你不这样做,它也会在内存中减少一个保留计数。但是你不需要将它作为成员变量来显示。

有很多方法可以从视图转换到另一个视图。我看到你有两个视图的视图控制器。因此,我将向您展示最简单(常见)的方式。

  • 推送到导航栏

如果您的视图有导航控制器,那么您可以将第二个控制器推送到导航堆栈。同时显示VC1

UINavigationController *navigationller = [[UINavigationController alloc] initWithRootViewController:VC1];
// show VC1

然后像这样显示VC2

- (void) handleLongClick:(UILongPressGestureRecognizer *)gestureRecognizer
{
SettingsDialogViewController* dialog = [[SettingsDialogViewController alloc] initWithNibName:@"GaugeSettingsDialogViewController" bundle:nil];

[self.navigationController pushViewController:dialog animated:YES];
}

您会自动获得导航栏上的后退按钮。

  • 显示为模态

为此你不需要导航控制器。

- (void) handleLongClick:(UILongPressGestureRecognizer *)gestureRecognizer
{
SettingsDialogViewController* dialog = [[SettingsDialogViewController alloc] initWithNibName:@"GaugeSettingsDialogViewController" bundle:nil];

[self presentViewController:dialog animated:YES completion:nil];
}

当然,如果需要,您需要添加一个动作再次关闭它。在导航控制器上,您会自动获得导航栏上的后退按钮。请尝试两者并决定你需要什么。