2016-08-18 1 views
1

Ich möchte den Titel einer Schaltfläche verwenden, die einen Titel als Titel einer anderen Schaltfläche in der Ansicht startet, die angezeigt wird. In der ersten Ansicht habe ich 4 Schaltflächen in einem Array namens Table erstellt. Dann in der zweiten Ansicht habe ich nur eine Schaltfläche, deren Titel wäre der Name der Schaltfläche, die den Übergang ausgelöst hat. Hier ist ein kurzer Überblick über das, was ich getan habeWie man eine Tastenbeschriftung nach einem segue in swift übergibt

@IBOutlet var Table: [UIButton]! 
@IBAction func commanderSegue(sender: AnyObject?) { 

    performSegueWithIdentifier("commander", sender: nil) 

    print("it works!") } 
    override func prepareForSegue(segue:UIStoryboardSegue, sender:AnyObject?){  
if segue.identifier == "commander" { 

    print("we can order!") 
     if let nextVC: OrderViewController = segue.destinationViewController as? OrderViewController { 

      if let buttonTitle = sender as? UIButton.currentTitle { 

      nextVC.tablex.titleLabel.text = buttonTitle 

     print("Miam!") 
      } 
     } 
} 

Aber es sagt mir, dass 'aktuelle Titel ist kein Mitgliedstyp von UIButton. Wie behebe ich das? Danke an alle, die helfen können.

Antwort

1

die Beschriftung der Schaltfläche ist titleLabel:

let button = sender as! UIButton 
if let buttonTitle = button.titleLabel!.text { 
    nextVC.buttonText = buttonTitle // Assign the label text to a variable in the next viewController 
} 

In Ihrem zweiten VC, wünschen Sie:

var buttonText: String! 

Und Sie können dann die Schaltfläche Titel auf die nächste vc zuweisen:

tablex.titleLabel.text = buttonText 
+0

Dank habe ich versucht, es aber es hat nicht funktioniert. Ich bekomme diese Nachricht '' fataler Fehler: unerwartet gefunden Null beim Auspacken eines optionalen Wertes '' (lldb) an der let button = sender as! UIbutton-Anweisung. Es passiert, weil wir es benutzen! Anstatt von ? im Absender als? Nun, ich werde morgen andere Lösungen ausprobieren. –

2

Drei Dinge:

  1. Sie sollten die UIButton als sender in commanderSegue übergeben. Sie wissen, dass Ihre @IBAction mit einer Schaltfläche verbunden ist, ändern Sie ihren Typ auf UIButton und ersetzen Sie nil durch sender im performSegueWithIdentifier Aufruf.

    performSegueWithIdentifier("commander", sender: sender) 
    
  2. In prepareForSegue, werfen bedingt die sender-UIButton und dann currentTitle auf das nennen:

    if let buttonTitle = (sender as? UIButton)?.currentTitle { 
    
  3. Die @IBOutlet s im destinationViewController sind nicht prepareForSegue Zeit eingerichtet. Um dies zu umgehen, speichern Titel auf eine Eigenschaft der Schaltfläche in den destinationViewController buttonTitle genannt und weisen sie die UILabel in viewDidLoad im destinationViewController:

    var buttonTitle = "" 
    
    override func viewDidLoad() { 
        super.viewDidLoad() 
        tablex.titleLabel.text = buttonTitle 
    } 
    

@IBOutlet var Table: [UIButton]! 
@IBAction func commanderSegue(sender: UIButton) { 

    performSegueWithIdentifier("commander", sender: sender) 

    print("it works!") 
} 

override func prepareForSegue(segue:UIStoryboardSegue, sender:AnyObject?) {  
    if segue.identifier == "commander" { 

     print("we can order!") 
     if let nextVC = segue.destinationViewController as? OrderViewController { 

      if let buttonTitle = (sender as? UIButton)?.currentTitle { 

       nextVC.buttonTitle = buttonTitle 

       print("Miam!") 
      } 
     } 
    } 
} 
+1

Danke !!! Ich habe eine Kombination aus dem, was Sie gesagt haben, und dem Rat von @ Shades verwendet. Wie Sie sagten, war das Problem, dass mein Absender Nil war, anstatt UIButton zu spezifizieren. Aber ich muss präzisieren, dass die Anweisung tablex.titleLabel.text = buttonTitle den Text nicht ändert. Es funktionierte, als ich Tablex.setTitle (buttonTitle, forState: UIControlState.Normal) verwendete. Natürlich musste ich buttonTitle als String mit der Anweisung var buttonTitle: String definieren! in der zweiten VC. Danke Jungs –

Verwandte Themen