2017-02-22 1 views
0

// cellule personnalisée dans un fichier rapide
IBoutlet est nul dans ma cellule de table personnalisée?

import UIKit 

class CardTableViewCell: UITableViewCell { 

    @IBOutlet weak var elapsedTime: UILabel! 
    @IBOutlet weak var todo: UILabel! 
    @IBOutlet weak var startAndStop: UIView! 
    @IBOutlet weak var progress: UIView! 
    @IBOutlet weak var cardView: UIView! 

} 

// contrôleur de vue Tableau personnalisé dans un autre fichier rapide

import UIKit 

class CardFeedTableViewController: UITableViewController { 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     tableView.register(CardTableViewCell.self, forCellReuseIdentifier: "cardCell") 
     tableView.delegate = self 
     tableView.dataSource = self 
    } 

    // MARK: - Table view data source 

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     // #warning Incomplete implementation, return the number of rows 
     return 3 
    } 


    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
     let cell: CardTableViewCell = self.tableView.dequeueReusableCell(withIdentifier: "cardCell", for: indexPath) as! CardTableViewCell 
     cell.todo.text = "study" 
     return cell 
    } 

running the app triggers a error

storyboard

Je ne sais pas pourquoi toutes les propriétés dans la cellule de mon tableau est nulle, quand je cours l'application.

+0

Si vous n'avez pas utilisé xib, vous devez supprimer le registre de la ligne de vue ne charge, sinon, vous devez utiliser nib cellulaire registre pour identifier tableView.register (UINib ... ", pourCellReuseIdentifier: CardTableViewCell.self) –

+0

em ~, pouvez-vous me donner plus de détails? Je ne sais toujours pas pourquoi il devrait être comme ça? T_T – cary

Répondre

2

Il existe deux variantes pour vous inscrire, mais les deux prennent un paramètre appelé forCellReuseIdentifier, qui est une chaîne qui vous permet d'enregistrer différents types de cellules vue de table. Par exemple, vous pourriez avoir une réutilisation identifiant « DefaultCell », un autre appelé « Heading cellule », un autre « CellWithTextField », et ainsi de suite. La réutilisation de différentes cellules permet d'économiser des ressources système.

Si vous souhaitez utiliser registre() avec une classe Swift, vous fournir une table vue classe cellulaire comme premier paramètre. Ceci est utile si votre cellule est définie entièrement dans le code. À titre d'exemple, celui-ci utilise la valeur par défaut classe UITableViewCell:

tableView.register(UITableViewCell.self, forCellReuseIdentifier: "DefaultCell") 

Vous pouvez alors dequeue que comme cellule ceci:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCell(withIdentifier: "DefaultCell")! 
    return cell 
} 

L'autre option consiste à utiliser registre ( avec plume Interface Builder fichier. Les plumes contiennent le nom de classe à utiliser avec leur conception, donc cette méthode est plus courante. Voici un exemple

tableView.register(UINib(nibName: "yourNib", bundle: nil), forCellReuseIdentifier: "CellFromNib") 

Mais si vous utilisez storyboards vous trouverez plus facile de créer cellules prototypes et leur donner un identifiant de réutilisation directement dans Interface Builder. Donc pas besoin de s'inscrire par programme.

Supprimer ce formulaire en ligne viewDidLoad

tableView.register(CardTableViewCell.self, forCellReuseIdentifier: "cardCell). 
+0

J'ai oublié de connecter la tableVoir les points de vente T_T – cary

+0

supprimer tableView.resister fonctionne, mais pourquoi? – cary

+0

Marquer la réponse correctement, puis parce que ce n'est pas obligatoire lorsque vous utilisez un storyboard. –