我有一个主视图,上面有一个UISlider。
在主视图中,我使用以下方法添加子视图:
gameView *myViewController = [[gameView alloc] initWithNibName:@"gameView" bundle:nil];
[self.view addSubview:myViewController.view];
子视图在主视图的顶部创建。
当我使用:
删除子视图时[self.view removeFromSuperview];
下方的主视图变得可见。
我希望能够在调用[self.view removeFromSuperview]
之前从子视图更新主视图上的UISlider的值有可能吗?
基本上,这个问题可以推广到如何从子视图更新主视图上的IBOutlet。
非常感谢帮助。 非常感谢!
答案 0 :(得分:0)
是的,这是可能的。
还有几种方法可以做到这一点。以下是我将如何做到这一点:
首先,让您的父视图控制器UISlider
成为其他对象可以访问的属性。
其次,为您的gameView
对象提供一个您将链接到父视图的实例变量(让我们称之为id savedParent;
)
然后,在执行removeFromSuperview
之前,您可以执行以下操作:
ParentViewController * parentVC = (ParentViewController *) savedParent;
if(parentVC)
{
// some float value of whatever you want to set the slider value to
parentVC.slider.value = 0.5f;
}
另外,如果您只想添加子视图,为什么要实例化整个View Controller对象(gameView
)?当您进行removeFromSubview
调用时,视图会被移除,但您的gameView
视图控制器未被释放(甚至可能会丢失并泄漏到内存中,从而导致崩溃)。如果要进行子视图,则子类UIView
。如果要推送新的视图控制器,请按下整个控制器(而不仅仅是它包含的视图)。
答案 1 :(得分:0)
这是另一种方式:
我不确定滑块代表什么,但你需要创建一个代表这个
的对象@interface MyGameThing : NSObject
@property (assign) CGFloat myValue;
@end
@implementation MyGameThing {
CGFloat *_value;
}
@synthesize myValue = _myValue;
@end
然后,您需要将该对象传递给两个视图控制器(或使其成为单例)。
然后,在parentViewController上,在viewWillAppear中,只需将滑块设置为新值。
丹尼尔。
(p.s。不只是将视图控制器视图添加到superview,使用presentModalViewController / dismissModalViewController或导航控制器。)