隐藏/显示另一个类中的视图

时间:2012-08-01 02:07:07

标签: objective-c ios

我有以下情况: enter image description here

SecondViewController位于FirstViewController内。现在,我想向FirstViewController添加另一个子类,但是从secondViewController类添加,如图像所示:enter image description here

我一直在寻找,我不认为这是可能的。我已经尝试实例化FirstViewController,访问“view to subview”并添加为子视图,但这不起作用:

FirstViewController *viewController = [[FirstViewController alloc] init];
[self.view addSubview:[viewController viewToAddAsSubView]];

任何提示/解决方案?

谢谢!

2 个答案:

答案 0 :(得分:3)

使用NSNotificationCenter实际上是可行的。示例如下:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(METHOD:) name:@"LISTEN_TO_VIEW_2" object:nil];

上面的代码应放在视图1中,以“监听”视图2,向其发送通知,告知您应该执行视图1中的方法,以便在视图1中添加/编辑您想要的任何内容。

[[NSNotificationCenter defaultCenter] postNotificationName:@"LISTEN_TO_VIEW_2" object:nil];

上面的代码会将通知发送到视图1.然后在视图1中,你将有一个像这样的方法:

-(void)METHOD:(id)sender {
//do something here
}

答案 1 :(得分:0)

一种可能的方法是使用SecondViewController的视图的superView。这是一种非常直接的方式。

[[self.view superview] insertSubview:theView aboveSubview:self.view];

另一种方法是使用委托。您可以在SecondViewController中声明委托,如

@protocol SecondViewControllerDelegate : NSObject
{
    - (void)requestInsertView:(UIView*)view aboveView:(UIView*)baseView;
}

@interface SecondViewController <...>

@property (nonatomic, assign) id<SecondViewControllerDelegate>superViewDelegate;
@end;

修改FirstViewController的声明以实现SecondViewControllerDelegate

@interface FirstViewController <SecondViewControllerDelegate, ...> 

@implement FirstViewController

- (void)requestInsertView:(UIView*)view aboveView:(UIView*)baseView
{
    [self.view insertView:view aboveSubview:baseView];
}
@end;

创建SecondViewController后,将其superViewDelegate设置为FirstViewController的实例。

在你需要从SecondViewController添加视图的地方,你可以调用

[self.superViewDelegate requestInsertView:view aboveView:self.view];