将控制器添加为从子视图打开的子控制器
我正在开发包含最新SDK的iOS 5.0+应用程序。将控制器添加为从子视图打开的子控制器
我有一个视图控制器的视图(VC1)。在这个视图里面我有一个自定义的孩子UIView
(view2)。
从这个子视图我要打开另一个视图控制器(VC2),我想这样做增加VC2小时候控制器VC1,但我不知道该怎么做。
现在,视图2我有这样的方法:
- (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的子控制器?
但如果我这样做,对话框将被释放,我不想添加一个实例变量,因为它每次都将在内存中。
即使您不这样做,它也会在内存中的保留数少一个。但是你不需要把它作为一个成员变量来显示。
从视图切换到另一视图有很多方法。我看到你有两个视图控制器。所以我会告诉你最简单(常见)的方法。
- 推到navigationstack
如果您认为有一个导航控制器,你可以在第二控制器推送到导航堆栈。虽然显示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];
}
当然,你需要添加一个动作再次关闭它,如果你想要的。在导航控制器上,您将自动获得导航栏上的后退按钮。请尝试两者并决定你需要什么。
感谢您的回答,但我不能'[self presentViewController:dialog animated:YES completion:nil];'因为' - (void)handleLongClick:(UILongPressGestureRecognizer *)gestureRecognizer'在UIView上。 – VansFannel 2013-04-10 07:37:28
然后你的观点必须告诉他的视图控制器他认识到了这个动作(例如使用委托)。视图控制器应该负责改变视图而不是视图。一个观点不应该那样做,它是针对MVC模式的。 – Mert 2013-04-10 07:41:28
我不明白你为什么不想创建父'UIViewController的实例变量/属性你能澄清一下吗? UIPopoverController做类似的事情,将子视图控制器存储在一个保留的属性中。 – 2013-04-10 07:01:20
因为它会一直在内存中,浪费内存。 – VansFannel 2013-04-10 07:36:25