Zugriff auf IBOutlet von View 1 über Knopfdruck in View2

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Zugriff auf IBOutlet von View 1 über Knopfdruck in View2

    Hey Leute,
    habe mich zwar eben erst registriert, jedoch hat das Forum mir schon oft nützliche Dienste erwiesen. Zu meinem Thema bin ich jedoch nicht fündig geworden, bzw. habe ich die Erklärungen aus dem WorldWideWeb dazu nicht ganz umsetzen können.
    Mein Problem ist:

    Ich habe arbeite an einer App, die beim Start standardmäßig das "MainWindow.XIB" lädt. Es handelt sich um eine ViewBased Application -> folglich besitze ich noch einen FirstViewController. Das Window des FirstViewCOntrollers besteht aus einem UILabel, welches ich auch per IBOutlet in der headerdatei deklariert habe:

    IBOutlet UITextLabel *uberschrift;

    Per Knopfdruck auf einen Menü-Button im FirstViewController.xib wird ein neuer View eingeblendet. Dieser "MenuView.xib" besitzt mehrere Buttons. Per Klick auf einen der Button soll sich nun der Text des uberschrift-Labels aus dem FirstViewController.xib ändern. Der überlagerte MenuView wird anschließend per
    [self dismissModalViewControllerAnimated:YES] ausgeblendet.

    Wie zur Hölle bekomme ich nun den Text des uberschrift-Labels aus einem anderen View heraus geändert? Der Übergang zum MenuView und das anschließende Ausblenden des MenuViews per Knopfdruck funktioniert, das Ändern der Beschriftung jedoch nicht!

    Ich habe im Internet in Englisch, Spanisch und Deutsch nach einer Lösung für mein Problem gesucht, jedoch konnte mir kein Ergebnis weiterhelfen.

    Für jeden Ansatz wäre ich dankbar,

    Denis :)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von ThaBigD ()

  • Richtig. uberschrift ist ein label in View 1, welches für jeden UIBUtton aus View 2 einen anderen String anzeigen soll.
    Also bspw. startet die App mit dem Titel "Hauptseite", dann geht man ins Menü (view 2) und klickt auf Infos -> view 2 wird ausgeblendet und das uberschrift-label in view 1 soll den Titel "Infos" tragen. :S
  • Erstmal danke für eure Antworten! :)
    Also, was ich bis jetzt probiert habe:

    Ich habe View 1 (mit view1.h und view1.m) und View 2 (view2.h und view2.m)

    In view1.h:
    extern NSString *text;

    In view2.m dann:
    #import "view1.h"

    und in Action: -(IBAction)knopfXgedrückt dann:
    text = @"blaBla";
    [view1.uberschrift setText:text];

    wobei uberschrift ein Label ist.

    Falls das eine Möglichkeit ist bin ich bereits einen Schritt weiter. Das Problem: in der letzten zeile code bekomme ich jedes Mal die Fehlermeldung "expected ';' before ':' token.
    Was sagt mir das denn nun wieder?! Sorry, aber stehe grade völlig auf dem schlauch. :S
  • Thallius schrieb:

    Pinke Schrift auf gelbem Hintergrund ist sehr gut zu lesen, aber ich glaube das willst du nicht wirklich :D

    Solange es gut zu lesen ist und sonst nicht in den Augen schmerzt - warum nicht? Ich denke mir dann halt: Oh, das ist wohl ein Mensch, der pinke Schrift auf gelbem Hintergrund schön findet. Aber es stört mich weniger als inhaltslose Postings.

    Edit: Das OP war ursprünglich in einem mitteldunklen, blassen Blau, etwas in Richtung Flieder, auf dem hellgrauen Standardhintergrund. War problemlos lesbar und sah, wie ich fand, gar nicht schlecht aus.
    Multigrad - 360°-Produktfotografie für den Mac
  • Also Leute... Zum Thema properties und synthesize:

    View 1.h enthält nun:

    @property (nonatomic, retain) IBOutlet UILabel *uberschrift;


    In View 2.h dementsprechend:

    #import "view1.h"
    @synthesize uberschrift;

    Beim kompilieren bekomme ich nun die Fehlermeldung: no declaration of property 'uberschrift' found in Interface.

    Verknüpft im IB ist das textfeld korrekt. Wo liegt mein Denkfehler? :S

    Danke für eure Mühe!
  • Danke. Hab deinen Code jetzt mal übernommen. Das Programm kann auch ohne fehler kompiliert und gestartet werden. Ich poste einfach mal etwas Code:

    -(IBAction)switchToTermine {

    [self dismissModalViewControllerAnimated:YES];
    View1 *controller = [[View1 alloc] init];
    controller.uberschrift.text=@"Termine";
    [controller release];
    }


    Das ganze ist eine IBAction für einen Button. Muss der geänderte View jetzt noch neu geladen werden? Der Text des Labels ändert sich immer noch nicht. :S
    Wenn ich versuche den ersten View über

    view1 *screen = [[view1 alloc] initWithNibName:nil bundle:nil];
    screen.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
    [self presentModalViewController:screen animated:YES];
    [screen release];

    neu zu laden schmiert mein Programm ab.
  • AR.DDev schrieb:

    View 2.h
    #import "view1.h"

    Besser:
    view2.h:

    @class View1;

    View 2.m

    #import "view1.h"

    AR.DDev schrieb:

    View 2.h
    View 2.m
    view1 *controller = [[view1 alloc] init];
    ...
    controller.uberschrift.text = @"Foo";
    ...
    [controller release];

    Dat kapier' ich jetzt nicht - Du machst nen neuen Controller auf, setzt das Label und machst alles wieder zu. Zu dem Zeitpunkt existiert doch schon ein View1-Controller, oder? In dem sollte das Label gesetzt werden.
    Multigrad - 360°-Produktfotografie für den Mac
  • Ich habe jetzt versucht deinen Code in meinem Beispiel zu übernehmen. Das UILabel heißt bei mir "textLabel". Das einzige Problem was jetzt noch existiert:

    [self.textLabel setDelegate:self]; <-- UILabel may not respond to setDelegate:

    Ich hänge das Projekt mal an, evtl. sieht jemand ja den Fehler, danach lasse ich euch damit auch in Ruhe ?( :wacko:


    Danke,
    Denis.