2017-08-11 1 views
0

J'ai mon tableau, ma configuration tableview et le tableau affiche le tableau de chaînes. Plus de 80 chaînes dans un tableau.Passage de la chaîne sélectionnée dans uiTableView de Array vers uiLabel dans le nouveau ViewController

Maintenant, je sélectionne une ligne, et évidemment je veux passer la chaîne dans cette ligne à uiLabel dans un ViewController secondaire.

placeTypes est mon tableau déclaré qui n'est pas dans ce code affiché, imaginez un tableau avec 84 chaînes! Mon segueIdentifier est un < - facile peasy. Et passedString est le uiLabel qui recevra les données de chaîne ..well ... passées.

Code TableView

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 


    return placeTypes.count 
} 


override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 

    let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) 

    cell.textLabel?.text = placeTypes[indexPath.row] 

    return cell 
} 

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
    NSLog("You selected cell number: \(indexPath.row)!") 

    performSegue(withIdentifier: "A", sender: self) 
} 

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 

    if segue.identifier == "A" { 
    // let viewController = segue.destination as? ViewController 

     // SOMEHOW PASS THE SELECTED STRING IN THE SELECTED ROW TO THE VIEW CONTROLLER 

    } 


} 

Bon et maintenant mon ViewController Code

@IBOutlet weak var passedString: UILabel! 

override func viewDidLoad() { 
    super.viewDidLoad() 

} 

override func viewWillAppear(_ animated: Bool) { 
    super.viewWillAppear(animated) 

} 

EDIT: Je suis toujours à obtenir des erreurs. Avec la mise à jour préparer pour segue, j'utilise l'identificateur non résolu pour placeTypes [indexPath.row] et viewController me dit qu'il n'y a pas de variable sendString.

Répondre

0

A fait didSelectRowAt transmettre indexPath comme expéditeur et dans prepare vous pouvez le convertir en IndexPath. Essaye ça.

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
    NSLog("You selected cell number: \(indexPath.row)!") 

    performSegue(withIdentifier: "A", sender: indexPath) 
} 

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 

    if segue.identifier == "A" { 

     let indexPath = sender as? IndexPath { 

      let yourText = placeTypes[indexPath.row] 

      // let viewController = segue.destination as? ViewController    
      // SOMEHOW PASS THE SELECTED STRING IN THE SELECTED ROW TO THE VIEW CONTROLLER 
     }          
    }     
} 
1
class TableViewController: UITableViewController { 

    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
     print("Row number: \(indexPath.row)") 
     performSegue(withIdentifier: "A", sender: indexPath) 
} 


    override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 

     if segue.identifier == "A" { 
      if let viewController = segue.destination as ViewController, 
       let indexPath = sender as IndexPath { 
       viewController.sendString = placeTypes[indexPath.row] 
      } 
     } 
    } 
} 


class ViewController : UIViewController { 
    @IBOutlet weak var passedString: UILabel! 
    // Put the string you need to send in a separate var 
    // You can't rely on the view controller being properly initalized 
    var sendString: String? 

    override func viewDidLoad() { 
     super.viewDidLoad() 

    } 

    override func viewWillAppear(_ animated: Bool) { 
     super.viewWillAppear(animated) 
     if let sendString = sendString { 
      passedString.text = sendString 
     } 
    } 
} 

Vous pouvez également jeter un oeil à légendaire pomme de terre: https://github.com/ryantxr/legendary-potato

+0

Intéressant. Je reçois des erreurs. Utilisation d'un identifiant non résolu pour indexPath dans une section perform. –

+0

La réponse a été mise à jour. – ryantxr