0

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

我有一个带有视图(VC1)的视图控制器。在此视图中,我有一个自定义子项UIViewview2)。

从这个子视图中,我将打开另一个视图控制器(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 的子控制器?

4

1 回答 1

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];
}

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

于 2013-04-10T07:07:33.920 回答