我试图在这里找到一个解决方案但是无法解决,基本上我有一个交互式子视图,我需要从子视图中切换到新的交互式子视图。我可以在主视图中使用IBAction轻松更改子视图,但是我从子视图中更改视图失败了。这是代码......这应该使我想要做的更清楚。
在MainViewController的.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
in .m
@implementation MainViewController
@synthesize oneviewController;
@synthesize twoViewController;
-(IBAction)goToView {
[self.view addSubview:twoViewController.view];
}
- (void)viewDidLoad {
[super viewDidLoad];
[self.view addSubview:oneviewController.view];
}
好的,这一切都很棒,我可以加载带有xib的ViewControllers和所有他们的`按钮工作等。 但是当我尝试......
<。>在OneViewController的.m中#import "MainViewController"
...
[MainViewController.view addSubview:twoViewController.view]; ...
这不起作用,我尝试了各种各样的东西,通过将oneViewController添加到oneViewController的.h,但它崩溃了...我仍然很新的所有这一切所以很可能我错过了明显的。谢谢你的帮助!
我也在OneViewController的.m中试过这个。
但它仍然崩溃......虽然构建成功了
MainViewController* mySuperView = (MainViewController*)self.view.superview;
TwoViewController *twoViewController;
[mySuperView.view addSubview:twoViewController.view];
答案 0 :(得分:0)
此操作正在错误的地方完成。如果您尝试将子视图添加到MainViewController,您应该在MainViewController.m中处理它。你在打电话:
[MainViewController.view addSubview:twoViewController.view];
但是MainViewController.view是一个静态的视图实例。如果你想保持原样,并假设OneViewController已经是MainViewController上的子视图,你应该这样做:
UIView * main = [OneViewController.view superview]; [main addSubview:twoViewController.view];
这非常危险,因为您无法保证为此视图提供超视图。我只是在MainViewController中处理所有这些。没有控制器应该有权将子视图添加到另一个控制器,除非它有一个MainViewController实例。
答案 1 :(得分:0)
以下代码有效,但它给了我一个警告......
在我的子视图中,OneViewController.m(在IBAction下)......
{for (UIView* next = [self.view superview]; next; next = next.superview) {
UIResponder* nextResponder = [next nextResponder];
if ([nextResponder isKindOfClass:[UIViewController class]]) {
[(UIViewController*)nextResponder resetSubView];
}`
在我的MainViewController.m
中 - (void) resetSubView {
[self.view addSubview:twoViewController.view];
}