[Swift] Label auf einer anderen View ändern

Dieses Thema im Forum "macOS-Developer" wurde erstellt von Verwirrter, 24.04.16.

Schlagworte:
  1. Verwirrter

    Verwirrter Tokyo Rose

    Dabei seit:
    09.02.15
    Beiträge:
    66
    Hallo,
    ich habe folgendes Problem:
    Auf einem NS View Controller gibt es einen Button, der einen Segue zu einem zweiten NS View Controller öffnen soll.
    Das mit dem Segue funktioniert auch, allerdings soll beim Klick auf den Button zusätzlich ein Funktion ausgeführt werden, die ein Label auf dem zweiten NS View Controller ändert.
    Ich habe dem Button in einer Klasse eine IBAction zugewiesen. Mittels "print()" habe ich nun feststellen müssen, dass diese Funktion gar nicht ausgeführt wird.
    Wenn ich einen zweiten Button mit der Funktion verlinke und die Funktion zusätzlich noch damit erweitere, dass sie das Einblenden des Segues durch Code ausführt, erscheint folgende Fehlermeldung:
    Beide NS View Controller haben dieselbe Klasse zugewiesen bekommen und das Label wird vorher auch mit IBOutlet in der Klasse deklariert.

    Wo liegt der Fehler?

    Danke :)
     
  2. Tobias Scholze

    Tobias Scholze Apfeltalk Entwicker

    Dabei seit:
    15.07.09
    Beiträge:
    1.576
  3. Verwirrter

    Verwirrter Tokyo Rose

    Dabei seit:
    09.02.15
    Beiträge:
    66
    Okay, habe das ganze jetzt so gemacht, wie ich es verstanden habe (2 verschiedene Möglichkeiten).
    Code:
    @IBAction func settextfield(sender: AnyObject) {
           performSegueWithIdentifier("Test", sender: nil)
            super.viewDidLoad(MyCheckbox.state = 0)
        }
    Code:
    @IBActionfunc settextfield(sender: AnyObject) {
            performSegueWithIdentifier("Test", sender: nil)
            super.viewDidLoad()
            MyCheckbox.state = 0
        }
    Leider wird Mir immer noch derselbe Fehler wie vorher ausgegeben.
    :/
     
    #3 Verwirrter, 24.04.16
    Zuletzt bearbeitet: 24.04.16
  4. KALLT

    KALLT deaktivierter Benutzer

    Dabei seit:
    12.11.08
    Beiträge:
    1.523
    Versuche es mal mit der Funktion prepareForSegue() von der UIViewController-Klasse (die musst du überschreiben). Die ist genau für solche Zwecke gedacht. Du kannst damit nämlich den zweiten ViewController selbst instanzieren und die Properties entsprechend ändern. Ein ganz einfaches Beispiel findest du im Vorlageprojekt Master–Detail Application.
     
  5. MacApple

    MacApple Schmalzprinz

    Dabei seit:
    05.01.04
    Beiträge:
    3.583
    Hier geht es um OS X. Da gibt es keinen UIViewController.;)

    In prepareForSegue() bitte keine Instanz selbst erstellten, sondern von der übergebenen NSStoryboardSegue sich den destinationController geben lassen.
     
  6. KALLT

    KALLT deaktivierter Benutzer

    Dabei seit:
    12.11.08
    Beiträge:
    1.523
    Ah, stimmt. Da habe ich etwas zu flüchtig gelesen.
     
  7. Verwirrter

    Verwirrter Tokyo Rose

    Dabei seit:
    09.02.15
    Beiträge:
    66
    Okay, ich habe jetzt etwas gegoogelt und in die Klasse des ersten Fensters um folgenden Code ergänzt:
    Code:
    override func prepareForSegue(segue: NSStoryboardSegue, sender: AnyObject!) {
            if (segue.identifier == "segueTest") {
                let yourNextViewController = (segue.destinationController as! TestController)
                yourNextViewController.receivedData = "test"
               
            }
        }
    Allerdings erhalte ich folgenden Fehler: "Value of Type 'TestController' has no member 'receivedData'"
    In der zweiten Klasse werde ich zudem darauf hingewiesen, dass es die Variable nicht gebe.
     
  8. MacApple

    MacApple Schmalzprinz

    Dabei seit:
    05.01.04
    Beiträge:
    3.583
    Nun ja, auf das was es nicht gibt kann man nicht zugreifen.
     
  9. Verwirrter

    Verwirrter Tokyo Rose

    Dabei seit:
    09.02.15
    Beiträge:
    66
    Okay, habe jetzt die entsprechenden Variablen auf "" gesetzt ... Warum klappt es denn nicht mit der Funktion in der ersten Klasse?
     
  10. Tobias Scholze

    Tobias Scholze Apfeltalk Entwicker

    Dabei seit:
    15.07.09
    Beiträge:
    1.576
    Hi,
    was ist für dich die erste Klasse? :) Sorry, ist etwas schwer hier den Überblick zu behalten.

    Grüße, Tobi
     
  11. Verwirrter

    Verwirrter Tokyo Rose

    Dabei seit:
    09.02.15
    Beiträge:
    66
    Die erste Klasse ist für Mich der erste View Controller.
    :)
     
  12. Tobias Scholze

    Tobias Scholze Apfeltalk Entwicker

    Dabei seit:
    15.07.09
    Beiträge:
    1.576
    Hi,
    poste doch bitte mal den ganzen Source bzw. füge bitte dein Projekt als zip dem Thread hinzu. :)

    Grüße, Tobi
     
  13. Verwirrter

    Verwirrter Tokyo Rose

    Dabei seit:
    09.02.15
    Beiträge:
    66
    Hey,
    danke für Eure ganzen Tipps, es funktioniert jetzt.
    :)

    Zeitweise wurden noch Fehler ausgegeben, aber nur, weil ich in der ersten Klasse noch die IBOutles des zweiten Fensters hatte.
     
    Tobias Scholze gefällt das.