2016-06-11 6 views
1

Ich bin ziemlich neu zu schnell und ich versuche nur, die verschiedenen Techniken zu lernen.Wie übertrage ich Informationen in einem Uilabel in der zweiten Ansicht Controller in Swift?

Die Situation: Ich habe 2 View-Controller. View Controller Nummer 1 besteht zum Beispiel aus vier Schaltflächen (Norden, Süden, Osten, Westen). Sagen wir, Sie klicken auf den Norden Knopf. Es sollte Sie zu View Controller Nummer 2 führen und das UiLabel in View Controller 2 sollte den Namen der Taste anzeigen, die gedrückt wurde (in diesem Fall "North"). Ich weiß, wenn Sie Informationen weiterleiten, sollten Sie die Methode "Vorbereiten auf Überleitung" verwenden, aber gibt es eine Möglichkeit, dies mit allen 4 Schaltflächen zu tun? Ich habe auch eine optionale String-Variable in View Controller 2, die die Informationen von View Controller 1 erhalten sollte. Ich habe überall gesucht, aber ich habe keine Antwort auf diese erhalten.

Der Code i zur Zeit in View-Controller haben 1:

@IBAction func north(sender: UIButton) { 

} 
@IBAction func east(sender: UIButton) { 

} 
@IBAction func west(sender: UIButton) { 

} 
@IBAction func south(sender: UIButton) { 

} 

Der Code ich habe zur Zeit in-View-Controller 2:

@IBoutlet weak var label2: UILabel! 

var updateTheLabel: String? 
override func viewDidLoad() { 
super.viewDidLoad() 
label2.text = updateTheLabel! 
} 

Frage: Wie führe ich ein Segue mit allen vier Tasten, um zum Second View Controller zu wechseln und das UiLabel jeweils zu aktualisieren?

+0

Sie wollen gefangen senden UI Element zwischen Viewcontrollers zu übergeben? –

Antwort

0

an @ ahmad-Farrag-Lösung hinzuzufügen

Sie können Ihre IB Aktionen abholen den Text aus der Schaltfläche ändern, die diese

var buttonText = "" 

@IBAction func north(sender: UIButton) { 
    buttonText = sender.currentTitle.text 
} 
@IBAction func east(sender: UIButton) { 
    buttonText = sender.currentTitle.text 
} 
@IBAction func west(sender: UIButton) { 
    buttonText = sender.currentTitle.text 
} 
@IBAction func south(sender: UIButton) { 
    buttonText = sender.currentTitle.text 
} 

wird weisen Sie den Text von den Tasten auf der buttonText Variable gedrückt wird. Nehmen wir jetzt in Ihrem prepareForSegue an, dass die zwei View-Controller durch einen Kanal mit einer Kennung secondControllerSegue verbunden sind.

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    if segue.identifier == "secondControllerSegue" { 
     let controller = segue.destinationViewController as! SecondViewController 
     controller.updateTheLabel = buttonText 
    } 
} 

Dies wird die buttonText haben wir früher auf die secondViewController

+0

Danke !, Dies hat mir geholfen, mehr Sinn des Codes :) – Geniouse

1

Ja, Sie können.

Entfernen Sie einfach die Überschriften aus Ihrem Storyboard, dann programmgesteuert und machen Sie Ihre updateTheLabel-Eigenschaft öffentlich.

zum Beispiel:

let secondViewController = self.storyboard?.instantiateViewControllerWithIdentifier("SecondViewControllerIdentifier") as? SecondViewController 
secondViewController.updateTheLabel = "Whatever you like" 

//Then push or present to the secondViewController depending on your hierarchy. 
//self.navigationController?.pushViewController(secondViewController!, animated: true) 
//or 
//self.presentViewController(secondViewController!, animated: true, completion: nil) 
0

Sie mithilfe von NSNotificition Zentrum in Viewcontroller tun können

NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(ViewController.testObserver(_:)), name: "testObserver", object: ios) 

Ziel-View-Controller

func testObserver(noti : NSNotification){ 
    title = noti.object as? String 
} 
+1

Benachrichtigungen zwischen direkt verbundenen Controllern ist eine schlechte Programmiergewohnheit. – vadian

+0

Ok.Vielen Dank. Kann ich den richtigen Grund wissen? –

+1

Da ein Segment verwendet wird, erhalten Sie den Objektverweis für den Zielcontroller kostenlos. Benachrichtigungen sind nur sinnvoll, wenn sie an mehrere Objekte oder an ein Objekt gesendet werden, das überhaupt nicht mit dem Absender zusammenhängt. – vadian

Verwandte Themen