繁体   English   中英

通过Subview ios的IBAction改变superview的Subview

[英]change Subview of superview through IBAction of Subview ios

我试图在这里找到解决方案但无法找到,基本上我有一个交互式子视图,我需要从子视图中切换到一个新的交互式子视图。 我可以在主视图中使用 IBAction 轻松更改子视图,但我一直未能从子视图中更改视图。 这是代码......这应该使我想要完成的工作更加清晰。

MainViewController 的 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

英寸

@implementation MainViewController

@synthesize oneviewController;
@synthesize twoViewController;

-(IBAction)goToView {   
    [self.view addSubview:twoViewController.view];
}

- (void)viewDidLoad {
    [super viewDidLoad];

    [self.view addSubview:oneviewController.view];  
}

好的,这一切都很好,我可以使用 xib 加载两个 ViewController,并且它们的所有按钮都可以工作等等。..
但是当我尝试...

OneViewController 的 in.m

#import "MainViewController"

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

这不起作用,我尝试了各种方法,通过将 twoViewController 添加到 oneViewController 的.h 中,但它崩溃了......我对这一切仍然很陌生,所以很可能我错过了明显的东西。 感谢帮助!!

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

但它仍然崩溃......虽然构建成功

MainViewController* mySuperView = (MainViewController*)self.view.superview; TwoViewController *twoViewController; [mySuperView.view addSubview:twoViewController.view];

这个动作是在错误的地方进行的。 如果您尝试向 MainViewController 添加子视图,您应该在 MainViewController.m 中处理它。 您正在调用:

[MainViewController.view addSubview:twoViewController.view];

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

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

不过,这非常危险,因为不能保证您对此视图有超级视图。 我只是在 MainViewController 中处理所有这些。 没有 controller 应该有权将子视图添加到另一个 controller,除非它具有 MainViewController 的实例。

以下代码有效,但它给了我1个警告......

在我的子视图中,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]; }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM