Objective c 通过子视图ios的iAction更改superview的子视图

Objective c 通过子视图ios的iAction更改superview的子视图,objective-c,ios,ipad,uiviewcontroller,Objective C,Ios,Ipad,Uiviewcontroller,我试图在这里找到一个解决方案,但无法,基本上我有一个交互式子视图,我需要从子视图中切换到一个新的交互式子视图。我可以在主视图中使用iAction轻松更改子视图,但在子视图中更改视图失败。这是密码。。。这应该让我更清楚地知道我要完成什么 主视图控制器的in.h @interface MainViewController : UIViewController { IBOutlet OneViewController *oneviewController; IBOutlet TwoVi

我试图在这里找到一个解决方案,但无法,基本上我有一个交互式子视图,我需要从子视图中切换到一个新的交互式子视图。我可以在主视图中使用iAction轻松更改子视图,但在子视图中更改视图失败。这是密码。。。这应该让我更清楚地知道我要完成什么

主视图控制器的in.h

@interface MainViewController : UIViewController {
    IBOutlet OneViewController *oneviewController;
    IBOutlet TwoViewController *twoViewController;
}

-(IBAction)goToView;

@property (nonatomic, retain) IBOutlet OneViewController *oneviewController;
@property (nonatomic, retain) IBOutlet TwoViewController *twoViewController;

@end
#import "MainViewController"

...
[MainViewController.view addSubview:twoViewController.view];  ...
英寸

好的,这一切都很好,我能够加载带有xib的两个ViewController,以及它们的所有“按钮工作”等…
但是当我尝试

OneViewController的英寸数

@interface MainViewController : UIViewController {
    IBOutlet OneViewController *oneviewController;
    IBOutlet TwoViewController *twoViewController;
}

-(IBAction)goToView;

@property (nonatomic, retain) IBOutlet OneViewController *oneviewController;
@property (nonatomic, retain) IBOutlet TwoViewController *twoViewController;

@end
#import "MainViewController"

...
[MainViewController.view addSubview:twoViewController.view];  ...
这不起作用,我尝试了多种方法,将twoViewController添加到oneViewController的.h中,但它崩溃了。。。我对这一切还很陌生,所以很可能我忽略了显而易见的东西。谢谢你的帮助

我也在OneViewController的.m中尝试过这个

@interface MainViewController : UIViewController {
    IBOutlet OneViewController *oneviewController;
    IBOutlet TwoViewController *twoViewController;
}

-(IBAction)goToView;

@property (nonatomic, retain) IBOutlet OneViewController *oneviewController;
@property (nonatomic, retain) IBOutlet TwoViewController *twoViewController;

@end
#import "MainViewController"

...
[MainViewController.view addSubview:twoViewController.view];  ...
但它还是崩溃了。。。虽然建造成功了

MainViewController*mySuperView=(MainViewController*)self.view.superview;
TwoViewController*TwoViewController;

[mySuperView.view addSubview:twoViewController.view]

此操作在错误的位置执行。如果您试图将子视图添加到MainViewController中,则应该在MainViewController.m中真正处理该问题。您的电话是:

[MainViewController.view addSubview:twoViewController.view]

但是MainViewController.view是视图的静态实例。如果要保持原样,并假设OneViewController已经是MainViewController上的子视图,则应执行以下操作:

UIView*main=[OneViewController.view superview]; [main addSubview:twoViewController.view]


这是相当危险的,因为你不能保证有一个超级视图。我只需要在MainViewController中处理所有这些。除非有MainViewController的实例,否则任何控制器都无权将子视图添加到另一个控制器。

以下代码正常工作,但它给了我1个警告

在我的子视图中,OneViewController.m(在iAction下)

在我的MainViewController.m中

-(无效)重置子视图{
[self.view addSubview:twoViewController.view];

}

好的,那么如何告诉MainViewController从子视图中的iAction更改视图?我尝试了添加到问题中的另一个选项,但仍然崩溃