2012-04-03 8 views
3

Ich versuche, ein einfaches Bild auf einem UIImageView als solche zu setzen, wenn eine Taste auf dem ersten Blick berührt wird: aus irgendeinem GrundeWie lege ich eine Eigenschaft auf einem Storyboard UIViewController zwischen den Segmenten auf iOS 5 fest?

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    ImageViewController *imageViewController = [segue destinationViewController]; 
    imageViewController.title = @"test"; 
    imageViewController.imvBig.image = [UIImage imageNamed:@"test.png"]; 
    imageViewController.lblTest.text = @"test2"; 
} 

Die .title wird eingestellt und erscheint ganz gut, aber ich kann nicht Rufen Sie das imvBig.image auf, noch kann ich den Etikettentext erhalten. Ja, ich habe die Eigenschaft mit einem Outlet usw. erstellt (wie ich es gerade von IB direkt in den Code gezogen habe und es wurde automatisch erstellt).

Kann mir jemand sagen, wie man eine Eigenschaft in einem Storyboard-Setup von einer normalen Ansicht zur nächsten richtig einstellt?

Antwort

2

hat wahrscheinlich die ImageViewController nicht seinen Blick von der Storyboard noch geladen, wenn das System prepareForSegue:sender: sendet, so dass diese Auslässe (imvBig und lblTest) sind gleich Null. Nachrichten, die an nil gesendet werden, werden automatisch ignoriert.

Es ist normalerweise nicht angebracht, dass der Quellansicht-Controller mit den Ansichten des Zielansicht-Controllers herumfummelt. Der Zielansicht-Controller sollte die Einstellungen dieser Ansicht normalerweise entweder in viewDidLoad, viewWillAppear: oder festlegen.

+1

ich brauche um eine URL aus einer vorherigen Ansicht auf dem Navigationsstapel festzulegen. Ich muss wissen, wie man Daten an den ImageViewController richtig weitergibt. –

+2

Normalerweise deklarieren Sie Eigenschaften auf dem Zielansicht-Controller für Daten, die Sie in prepareForSegue übergeben möchten. In dieser Ansicht aktualisieren die ViewDidLoad des Controllers (oder später, falls zutreffend) seine Ansichten, um die Daten widerzuspiegeln. – rickster

2

Sieht aus wie ich in der Lage war, dies zu erhalten, indem die Schaffung eines NSString Eigenschaft zu arbeiten und dann auf viewDidLoad des ImageViewController das Etikett auf den String Einstellung:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view. 

    self.lbltest.text = _myString; 
} 

Ich glaube, ich nicht die Eigenschaft kann direkt , bis die Ansicht geladen ist.

+0

Es ist sowohl ein "can not" als auch ein "sollte nicht" - Sie möchten nicht, dass der rufende View-Controller Subviews im neuen Controller direkt manipuliert, da Sie möglicherweise später ändern, wie Sie etwas anzeigen möchten. Viel besser, einfach die Daten weiterzuleiten und den korrekten Weg zur Anzeige in viewDidLoad() auszusortieren. –

0

Sie müssen den viewController nicht einfach die segue destinationViewController-Eigenschaft verwenden. Ich habe immer eine Kennung im Storyboard zunächst so dass ich mehrere segues verwenden können: es

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
if ([[segue identifier] isEqualToString:@"Show ImageViewController"]) { 

[segue.destinationViewController setTitle:@Test"]; 
[segue.destinationViewController setFoo:@"Bar"]; 
//More stuff to set 
} 

}

auch erstellen ein Bild im ImageViewController als Eigenschaft und synthetisieren, stellen Sie dann, dass auf die Bildansicht die viewDidAppear:

self. imvBig.image = myNewImge;//this in the viewDidLoad 

und stellen Sie das Bild in der segue:

[segue.destinationViewController setMyImage:[UIImage [email protected]"test.png"]]; 
Verwandte Themen