我正在使用最新的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的子控制器?
答案 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];
}
当然,如果需要,您需要添加一个动作再次关闭它。在导航控制器上,您会自动获得导航栏上的后退按钮。请尝试两者并决定你需要什么。