2017-08-22 1 views
1

J'essaie de transmettre des données d'un bouton de cellule vue de table à un contrôleur de vue. Selon la ligne dans laquelle le bouton est sélectionné, je souhaite que le texte de l'étiquette du contrôleur suivant soit défini en conséquence. Cependant, lorsque j'essaie de le faire, mes étiquettes dans le contrôleur de vue suivant restent vides et ne changent pas. Comment puis-je changer cela?Pourquoi le texte de l'étiquette ne se met-il pas à jour?

J'ai ajouté une action à tipButton dans un contrôleur de vue de table qui crée un lien avec le KeysController FYI.

Code pour la cellule de vue de la table:

class DrillsTableViewCell: UITableViewCell { 

var videoURL:[URL] = [URL(fileURLWithPath: "/Users/RalphSimmonds/Desktop/plainjayne/coolinDB/cook.mov"), URL(fileURLWithPath: "/Users/RalphSimmonds/Desktop/plainjayne/coolinDB/check.MOV")] 
var video = URL(fileURLWithPath: String()) 
var initialRow = Int() 
var firstTips = ["Tip 1: Stay Hydrated", "Tip 1: Keep elbow tucked", "x", "Tip 1: Take quick breaks:", "Tip 1: Keep your head up", "Tip 1: Don't cross your feet", "Tip 1: Don't do more than 15 reps"] 

var player: AVPlayer? 
var playerController = AVPlayerViewController() 

@IBOutlet weak var drillTitle: UILabel! 
@IBOutlet weak var tipButton: UIButton! 
@IBAction func tipsButton(_ sender: UIButton) { 
    print(String(initialRow)) 

    let tipsVC = UIStoryboard(name: "main", bundle: nil).instantiateViewController(withIdentifier: "KeysController") as! KeysController 
    tipsVC.key1.text = firstTips[initialRow] 
} 

code pour le contrôleur de vue dont les étiquettes que je suis en train de mettre à jour:

import UIKit 

class KeysController: UIViewController { 
    @IBOutlet weak var topLabel: UILabel! 
    @IBOutlet weak var key1: UILabel! 

    override func viewDidLoad() { 
     super.viewDidLoad() 
    } 
} 
+0

Chaque fois que vous appuyez sur le bouton de tableViewCell, vous créez nouvel objet de viewController et la mise en texte de l'étiquette. Vous devez utiliser l'objet existant de viewController pour modifier sa valeur de propriété (c'est-à-dire label). –

Répondre

3

Vos sorties ne sont pas câblé jusqu'à ce que les charges de la vue.

Essayez de créer une propriété dans votre KeysController, dites:

var keyText: String? 

Définissez la propriété après l'instanciation du contrôleur de vue:

tipsVC.keyText = firstTips[initialRow] 

Ensuite, dans votre méthode KeysController.viewDidLoad:

key1.text = keyText 
+0

Merci, j'essaie maintenant! –

0

c'est parce que le label key1 n'est pas encore chargé, il vaut mieux mettre à jour sur la place viewDidLoad

@IBAction func tipsButton(_ sender: UIButton) { 
    print(String(initialRow)) 

    let tipsVC = UIStoryboard(name: "main", bundle: nil).instantiateViewController(withIdentifier: "KeysController") as! KeysController 
    tipsVC.key1String = firstTips[initialRow] } 




    import UIKit 


     class KeysController: UIViewController { 
    var key1String:String = "" 


    @IBOutlet weak var topLabel: UILabel! 
    @IBOutlet weak var key1: UILabel! 


    override func viewDidLoad() { 
     super.viewDidLoad() 
     key1.text = key1String 

    } 
+0

Merci! Très perspicace! –