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

Hier ist mein Code zum Anzeigen meiner Ansicht. Ich weiß, dass ich App-Delegate-Variablen verwenden kann, aber es wäre besser, wenn ich irgendwie einen Parameter übergeben könnte, idealerweise mit einer Enumeration. Ist das möglich?Wie kann ich einen Parameter in eine Ansicht in iOS übergeben?

Antwort

13

einfach ein neues Init-Methode für Ihre HelpViewController erstellen und dann von dort aus seine super init-Methode aufrufen ...

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

Und es zu nennen:

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

Ok, was ist mit der Enum, die ich nicht erstellt habe eins noch. – Jules

+0

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

+0

Ich hatte gehofft, es würde mir einen Fehler in xcode geben, wenn ich initWithNibName ändere – Jules

1

Definieren Sie einen Setter für den Parameter in HelpViewController und Ihren Code ändern:

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

Ok, was ist mit der Enum, ich habe noch nicht erstellt. – Jules

+0

Sollte es nicht "JA" statt "WAHR" sein? – mshsayem

+0

Hmmm typedef enum {VAL1, VAL2, VAL3} Hilfeseiten; - (void) setHelpPage: (HelpPages) Wert {..... Ich habe etwas falsch hier – Jules

1

ich habe in der Regel nur bestimmte Variablen in meinem UIView, die ich von der übergeordneten Ansicht eingestellt. Um Variablen zurück zu geben, verwende ich die Funktion:

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

Können Sie mir eine SetFoo-Funktion geben, die eine Aufzählung verwendet? http://img.skitch.com/20101013-cd4ty65e3ns4d45hqjc71k1sn.jpg Auch was lastObject – Jules

+0

Wie Sie sehen können, müssen Sie Ihre Funktion anders erklären, als '- (void) setHelpPage: (Hilfeseiten *) Wert;' . Ich würde jedoch nicht empfehlen, die Setter-Funktion außer Kraft zu setzen, es sei denn, Sie müssen dies wirklich tun. Sie können '@ synthesize' viel einfacher verwenden, um diese Fähigkeit zum Einstellen von Parametern automatisch einzurichten. – Jason

+0

Ähm, verwirrt, wie installiere ich setFoo? Ich dachte, ich mache Fortschritte, jetzt habe ich keine Ahnung. – Jules

Verwandte Themen