将ViewController添加到Appdelegate

时间:2012-03-04 17:24:59

标签: uiviewcontroller

我正在尝试将视图控制器添加到Appdelegate类。我的代码是这样的..

[self.view addsubView:viewcontroller.view];

但遗憾的是我无法查看控制器视图。如果我在某处出错,请建议。谢谢你的时间。

AppdidFinishLaunching中的方法是: -

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
    // Override point for customization after application launch.
    self.window.backgroundColor = [UIColor whiteColor];
    // [self.window addSubview:videoController.view];
    self.window.rootViewController = videoController;
    [self.window makeKeyAndVisible];    
    return YES;
}

并在ViewController的Load视图中我写为

UIButton *playMovie = [UIButton buttonWithType:UIButtonTypeRoundedRect];
playMovie.frame = CGRectMake(70,30,100,50);
[playMovie setTitle:@"Play Movie" forState:UIControlStateHighlighted];
[playMovie addTarget:self action:@selector(playMovie:) forControlEvents:UIControlEventTouchDown];
[self.view addSubview:playMovie];

这里的问题是我无法查看按钮和视图。请帮助。

3 个答案:

答案 0 :(得分:9)

在任何情况下都不应该像这样将界面控制器的视图手动添加到界面中。应用程序委托本身不是视图控制器;所以viewcontroller不是它的孩子。所以视图不是你要添加的。正确使用视图控制器:视图控制器是您的应用程序窗口的rootViewController,或者是其他视图控制器的子视图 - 在任何一种情况下,它的视图都会自动放入界面。

如果此视图旨在作为应用程序的根视图,则执行Xcode 4.2项目模板所执行的操作(例如,单视图应用程序):实例化视图控制器并将其指定为self.window.rootViewController。如果没有,您不能使用视图控制器将其添加为您尝试的子视图;只需获取视图并添加它,而无需介入视图控制器。

您可以阅读我关于视图控制器的章节:http://www.apeth.com/iOSBook/ch19.html

答案 1 :(得分:0)

尝试下面它对我有用,

SFRmbrVC *viewController=[[SFRmbrVC alloc]initWithNibName:@"SFRmbrVC" bundle:nil];
[self.window.rootViewController addChildViewController:viewController];
viewController.parentController = self.window.rootViewController;
viewController.view.frame = self.window.rootViewController.view.frame;
[self.window.rootViewController.view addSubview:viewController.view];
viewController.view.alpha = 0;
[viewController didMoveToParentViewController:self.window.rootViewController];

[UIView animateWithDuration:0.25 delay:0.0 options:UIViewAnimationOptionCurveLinear animations:^
 {
     viewController.view.alpha = 1;
 }
                 completion:nil];

答案 2 :(得分:0)

解决此问题的最佳步骤是

  1. 创建您自己的委托并在AppDelegate中创建实例

例如

@protocol MyAppDelegate <NSObject>
@optional
- (void)myApplicationWillResignActive:(UIApplication *)application;
@end
  1. 在MyAppdelegate中拨打您的代表的电话

例如

- (void)applicationWillResignActive:(UIApplication *)application {
    [myDelegate myApplicationWillResignActive:application]
}
  1. 在您的viewController类(ViewController)中实现它。

4。将viewController类实例分配给AppDelegate中的myAppdelegate实例

例如

MyAppDelegate*myDelegate=(MyAppDelegate*)[[UIApplication sharedApplication] delegate];
myDelegate=self; //self=viewController class