2010-10-13 28 views
6
UIViewController *theController = [[HelpViewController alloc] initWithNibName:@"HelpView" bundle:nil]; 
[self.navigationController presentModalViewController:theController animated:TRUE]; 

Aquí está mi código para mostrar mi vista. Sé que puedo usar las variables delegadas de la aplicación, pero sería mejor si pudiera pasar un parámetro de alguna manera, idealmente usando una enumeración. es posible?¿Cómo puedo pasar un parámetro a una vista en iOS?

Respuesta

13

Basta con crear un nuevo método init para su HelpViewController y luego llamar a su método init súper partir de ahí ...

en HelpViewController.h

typedef enum 
{ 
    PAGE1, 
    PAGE2, 
    PAGE3 
} HelpPage; 

@interface HelpViewController 
{ 
    HelpPage helpPage; 
    // ... other ivars 
} 

// ... other functions and properties 

- (id)initWithNibName:(NSString*)nibName bundle:(NSBundle*)nibBundle onPage:(HelpPage)page; 

@end 

en HelpViewController.m

- (id)initWithNibName:(NSString*)nibName bundle:(NSBundle*)nibBundle onPage:(HelpPage)page 
{ 
    self = [super initWithNibName:nibName bundle:nibBundle]; 
    if(self == nil) 
    { 
     return nil; 
    } 

    // Initialise help page 
    helpPage = page; 
    // ... and/or do other things that depend on the value of page 

    return self; 
} 

Y llamarlo:

UIViewController *theController = [[HelpViewController alloc] initWithNibName:@"HelpView" bundle:nil onPage:PAGE1]; 
[self.navigationController presentModalViewController:theController animated:YES]; 
[theController release]; 
+0

Ok, qué pasa con la enumeración, no he creado uno todavía. – Jules

+0

typedef enum {VAL1, VAL2, VAL3} MyType; – jhabbott

+0

Esperaba que me diera un error en xcode si cambiaba initWithNibName – Jules

1

Definir un regulador para el parámetro en HelpViewController y cambiar el código para:

HelpViewController *theController = [[HelpViewController alloc] initWithNibName:@"HelpView" bundle:nil]; 
[theController setSomeValue:@"fooBar"]; 
[self.navigationController presentModalViewController:theController animated:YES]; 
+0

Ok, ¿qué pasa con la enumeración, todavía no he creado una. – Jules

+0

¿No debería ser 'SÍ', en lugar de 'VERDADERO'? – mshsayem

+0

Hmmm typedef enum {VAL1, VAL2, VAL3} Páginas de ayuda; - (void) setHelpPage: (HelpPages) value {..... Tengo algo mal aquí – Jules

1

por lo general sólo tienen determinadas variables en mi UIView, la cual di a la vista padre. Para pasar las variables de vuelta, hago uso de la función:

[[[self.navigationController viewControllers] lastObject] setFoo:foo]; 
+0

¿Puede darme una función SetFoo que utiliza una enumeración? http://img.skitch.com/20101013-cd4ty65e3ns4d45hqjc71k1sn.jpg también lo LastObject – Jules

+0

Como se puede ver, tiene que declarar su función de manera diferente, como '- (void) setHelpPage: (HelpPages *) valor;' . Sin embargo, no recomendaría anular la función de establecimiento a menos que realmente lo necesite. Puede usar '' sintetizar 'mucho más fácilmente para establecer automáticamente esta capacidad para establecer parámetros. – Jason

+0

Erm, confundido, entonces, ¿cómo configuro setFoo? Pensé que estaba progresando, ahora no tengo ni idea. – Jules

Cuestiones relacionadas