2017-04-25 5 views
-1

Ich muss diesen String-Wert an einen anderen ViewController übergeben. Aus irgendeinem Grund bekomme ich einen Fehler. Kann jemand darauf hinweisen, was ich falsch mache?Passing String Segue Swift

Need Viewcontroller

class GeneralChatroom: UIViewController, UITableViewDataSource, UITableViewDelegate, UITextFieldDelegate, UITextViewDelegate { 


//Get Data of current cell that has been tapped 
     func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath){ 

      //Eliminate highlight after cell is tapped 
      tableView.deselectRow(at: indexPath as IndexPath, animated: true) 

      let userIdentityString : String = generalRoomDataArr[indexPath.row].cellUserId 

      let destinationUID = userCellTapped() 

      destinationUID.programVar = userIdentityString 

      destinationUID.performSegue(withIdentifier: "profileTapped", sender: self) 


     } 

} 


    import UIKit 

    class userCellTapped: UIViewController { 

     var programVar : String! 


     override func viewDidLoad() { 
      super.viewDidLoad() 


      print("testbles", programVar) 


     } 


    } 
+0

Mögliche Duplikat [Geben von Daten zwischen View-Controller] (http://stackoverflow.com/questions/5210535/passing-data-between-view-controllers) – pableiros

Antwort

4

Die Art und Weise userIdentityString Wert userCellTapped passieren richtig ist Ziel-View-Controller-Variablen festgelegt durch prepare(for segue ...) in Ihrer ViewController Klasse Umsetzung:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    if segue.identifier == "profileTapped" { 
     if let destination = segue.destination as? MyDestinationViewControllerType { 
      destination.myVariable = myClassLevelVariable 
     } 
    } 
} 
0

Um zu rufen Methode

destinationUID.performSegue(withIdentifier: "profileTapped", sender: userIdentityString) 

müssen Sie Segue mit dem Bezeichner "profileTapped" in das Storyboard einfügen. Sender in der Methode ist der Wert, den Sie übergeben möchten. Als Identifier sollten Sie ID dieser Segue übergeben.

Und wenn Sie einige Daten an diesen Controller übergeben möchten. Yoy haben zusätzliche Methode

func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    if segue.identifier == "profileTapped", let vc = segue.destination as? UserCellTapped, let variable = sender as? String { 
     vc.programVar = variable 
    } 
} 
+0

Vielen Dank umzusetzen;) Sie sind sehr geschätzt. – codechicksrule