Crear un controller de vista sin una punta

En AppDelegate, quiero crear una subclass UIViewController y agregar su vista. El viw en sí será especificado en el código: no hay una punta.

Basado en los documentos de Apple, debería usar

initWithNibName:nil bundle:nil]; 

y luego en loadView del controller, agrego mis subidas, etc.

Sin embargo, el siguiente código de testing no funciona para mí. Modele el código AppDelegate en la demostración de PageControl de Apple, simplemente porque mi aplicación implementará una estructura similar (específicamente un controller base para administrar una vista de desplazamiento paginado y una matriz de otros controlleres para build las páginas).

Pero sospecho que mi código de AppDelegate es el problema, ya que el logging demuestra que initWithNibName :: y loadView se disparan. La aplicación que se muestra a continuación se ejecuta, pero la pantalla está en blanco. Estoy esperando una vista verde con una label.

AppDelegate

  - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { ScrollerController *controller = [[ScrollerController alloc] initWithNibName:nil bundle:nil]; [self.window addSubview:controller.view]; [self.window makeKeyAndVisible]; return YES; } 

ScrollerController (la subclass UIViewController)

 - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { // Custom initialization } return self; } - (void)loadView{ CGRect applicationFrame = [[UIScreen mainScreen] applicationFrame]; UIView *contentView = [[UIView alloc] initWithFrame:applicationFrame]; contentView.backgroundColor = [UIColor greenColor]; self.view = contentView; UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(40, 40, 100, 40)]; [label setText:@"Label created in ScrollerController.loadView"]; [self.view addSubview:label]; } 

Intente usar: self.window.rootViewController = controller; en lugar de [self.window addSubview:controller.view];

Tenga en count que también debe @synthesize window; y crearlo self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];

En lugar de initWithNibNamed :, simplemente use alloc y init o cualquiera de los otros intérpretes designados para el controller de vista. Aquí hay un ejemplo de un proyecto

 hoverViewController=[[BDHoverViewController alloc] initWithHoverStatusStyle:BDHoverViewStatusActivityProgressStyle]; self.window.rootViewController=hoverViewController; [self.window makeKeyAndVisible]; 

Además, la forma correcta (por ahora de todos modos) para agregar el controller de vista raíz a la window en el delegado de la aplicación es así:

 self.window.rootViewcontroller=controller; [self.window makeKeyAndVisible]; 

No es necesario agregar la vista a la window. El código anterior lo hace automáticamente.

Buena suerte,

T