self.view insertSubView ....不应该是self.view,但是什么?

时间:2011-04-30 15:17:18

标签: iphone objective-c cocoa-touch

我有一个UIViewController,它显示了不同的UIViewController子类。在主UIViewController.m中,我在app start上有一个名为'Home'的子类。

现在,Home视图加载了,我有一个按钮,我想用它切换到另一个名为'PreGameInfo'的视图。我正在尝试使用以下代码:

- (IBAction)showPreGameInfo:(id)sender {
    [self.view insertSubview:preGameInfo.view atIndex:0];
}

它不起作用,我知道这是因为'self.view'需要引用主UIViewController而不是'Home'视图的self。有没有人知道如何在SubView中使用UIButton时将SubView插入主UIViewController ???

谢谢!

4 个答案:

答案 0 :(得分:1)

您可以使用delagate。很容易

所以在信息视图控制器中实现它;

在InformationViewController.h中

@protocol InformationViewControllerDelegate;

@interface InformationViewController : UIViewController {
    id <InformationViewControllerDelegate> delegate;
}

@property (nonatomic, assign) id <InformationViewControllerDelegate> delegate;

- (IBAction)returnBack:(id)sender;

@end

@protocol InformationViewControllerDelegate

- (void)InformationViewControllerDidFinish:(InformationViewController *)controller;

@end
InformationViewController.m中的

- (IBAction)returnBack:(id)sender {
    [self.delegate InformationViewControllerDidFinish:self];
}

在任何视图控制器中使用委托,就像这样:

在HomeViewController.h中

#import "InformationViewController.h"
@interface HomeViewController : UIViewController <InformationViewControllerDelegate> {

}

编写方法以将视图从主视图更改为信息视图

- (IBAction)goToInformationView:(id)sender;

在HomeViewController.m

- (IBAction)goToInformationView:(id)sender {
    InformationViewController *controller = [[InformationViewController alloc] initWithNibName:nil bundle:nil];
    controller.delegate = self;
// You can chose the transition you want here (they are 4 see UIModalTransitionStyle)
        controller.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
        [self presentModalViewController:controller animated:YES];
        [controller release];
    }

最后但并非最不重要的是它在InformationViewController完成时通知HomeViewController的委托方法

- (void)InformationViewControllerDidFinish:(InformationViewController *)controller {
    [self dismissModalViewControllerAnimated:YES];
}

我希望它有所帮助

答案 1 :(得分:0)

- (IBAction)showPreGameInfo:(id)sender {
    [superview insertSubview:preGameInfo.view atIndex:0];
}

答案 2 :(得分:0)

此代码有效吗?

[self.parentViewController.view addSubview:myView];

答案 3 :(得分:0)

只需在模态视图中执行:

[self presentModalViewController:preGameInfo animated:YES]

或者你可以做这样的事情......

此行将您的新视图添加到Windows rootViewController视图

[self.view.window.rootViewController.view addSubview:preGameInfo.view];