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

Ecco il mio codice per mostrare la mia vista. So che posso usare le variabili delegate dell'app, ma sarebbe più corretto passare un parametro in qualche modo, idealmente usando un enum. È possibile?Come posso passare un parametro in una vista in iOS?

risposta

13

Basta creare un nuovo metodo init per il vostro HelpViewController e quindi chiamare il suo metodo super-init da lì ...

in 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 

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

E chiamarlo:

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

Ok, che dire dell'enum, non l'ho creato uno ancora. – Jules

+0

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

+0

Speravo che mi desse un errore in xcode se avessi cambiato initWithNibName – Jules

1

Definire un setter per il parametro nella HelpViewController e modificare il codice per:

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

Ok, che dire dell'enum, non l'ho ancora creato. – Jules

+0

Non dovrebbe essere 'SÌ', invece di 'VERO'? – mshsayem

+0

Hmmm typedef enum {VAL1, VAL2, VAL3} HelpPages; - (void) setHelpPage: (HelpPages) value {..... Ho qualcosa di sbagliato qui – Jules

1

Io generalmente resta che alcune variabili nella mia UIView, che ho impostato dalla vista padre. Per passare le variabili, uso la funzione:

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

Puoi darmi una funzione SetFoo che usa un enum? http://img.skitch.com/20101013-cd4ty65e3ns4d45hqjc71k1sn.jpg Anche cosa lastObject – Jules

+0

Come si può vedere, è necessario dichiarare la propria funzione in modo diverso, come valore '- (void) setHelpPage: (HelpPages *);' . Tuttavia, non suggerirei di sovrascrivere la funzione setter a meno che non sia necessario. Puoi usare molto più facilmente '@ synthesize' per impostare automaticamente questa capacità di impostare i parametri. – Jason

+0

Erm, confuso, quindi come posso impostare setFoo? Pensavo di fare dei progressi, ora non ne ho idea. – Jules

Problemi correlati