2012-03-04 14 views
5

Estoy tratando de agregar un controlador de vista a la clase Appdelegate. Mi código va de esta manera ..Agregando un ViewController a Appdelegate

[self.view addsubView:viewcontroller.view]; 

Pero desafortunadamente no puedo ver la vista del controlador. Por favor sugiera si me estoy equivocando en alguna parte. Gracias por su tiempo.

El método de AppdidFinishLaunching es: -

- (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; 
} 

y en la vista Carga de ViewController he escrito como

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]; 

El problema aquí es que no soy capaz de ver el botón y el ver. Por favor ayuda.

Respuesta

9

Bajo ninguna circunstancia debe agregar la vista del controlador de vista manualmente a la interfaz de esta manera. El delegado de la aplicación no es, en sí mismo, un controlador de vista; entonces viewcontroller no es su hijo. Entonces la vista no es tuya para agregar. Utilice los controladores de vista correctamente: un controlador de vista es el rootViewController de la ventana de su aplicación, o es el elemento secundario de otro controlador de vista, y en cualquier caso, su vista se coloca automáticamente en la interfaz.

Si esta vista es la vista raíz de la aplicación, haga lo que hacen las plantillas del proyecto Xcode 4.2 (por ejemplo, la aplicación de vista única): cree una instancia del controlador de vista y asígnelo como self.window.rootViewController. De lo contrario, no debe usar un controlador de vista para agregarlo como una subvista, ya que está tratando de hacerlo; solo obtenga la vista y agréguela, sin el controlador de vista intermedio.

Podría ayudar a leer mi capítulo sobre los controladores de vista: http://www.apeth.com/iOSBook/ch19.html

+0

La descripción proporcionada anteriormente como muy útil. Gracias por la info. Pero aún cuando trato de asignar el controlador de vista a la ventana todavía no puedo ver el controlador de vista. Por favor ayuda. Estoy editando la pregunta con el código. Por favor, avíseme si me estoy equivocando en algún lugar ... –

+0

Usted está diciendo 'self.window.rootViewController = videoController', pero no veo que asigne' videoController' un valor; nunca estás instanciando tu controlador de visualización. Entonces todo es nulo. No tiene controlador de vista ni vista, por lo que termina con una ventana blanca. – matt

+0

También su 'loadView' está escrito incorrectamente. ¡Lea la documentación (y el capítulo al que se vinculó)! En 'loadView' debes crear la vista y asignarla a' self.view'. El lugar para agregar cosas a la vista está en 'viewDidLoad'. – matt

0

Trate a continuación funciona para mí,

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]; 
Cuestiones relacionadas