UITableViewCell sous-classe avec XIB Swift
J'ai un UITableViewCell
sous-classe NameInput
qui se connecte à un xib avec une coutume init
méthode.
class NameInput: UITableViewCell {
class func make(label: String, placeholder: String) -> NameInput {
let input = NSBundle.mainBundle().loadNibNamed("NameInput", owner: nil, options: nil)[0] as NameInput
input.label.text = label
input.valueField.placeholder = placeholder
input.valueField.autocapitalizationType = .Words
return input
}
}
Est-il une manière que je peux initialiser cette cellule dans le viewDidLoad
méthode et toujours le réutiliser? Ou dois-je m'inscrire à la classe elle-même avec une réutilisation d'identification?
OriginalL'auteur jamespick | 2015-02-12
Vous devez vous connecter pour publier un commentaire.
Le coutumier PLUME est:
Enregistrer votre PLUME avec la réutilisation de l'identificateur. Dans Swift 3:
Dans Swift 2:
Définir votre cellule personnalisé de classe:
Créer un fichier NIB dans Interface Builder (avec le même nom référencé dans l'étape 1):
Spécifier la classe de base de la tableview cellule de la PLUME de référence personnalisé de votre classe de cellules (défini à l'étape 2).
Crochet de références entre les contrôles dans la cellule de la PLUME à la
@IBOutlet
références dans la cellule personnalisé de classe.Votre
cellForRowAtIndexPath
serait alors instancier la cellule et de définir les étiquettes. Dans Swift 3:Dans Swift 2:
Je n'étais pas tout à fait sûr de votre exemple les contrôles que vous avez placé sur votre cellulaire, mais le ci-dessus a deux
UILabel
contrôles. Crochet jusqu'à ce que@IBOutlet
références en font sens pour votre application.Ok, disons que vous aurez 50 lignes, mais qu'il y a, disons, trois différents types de configurations de cellules. Donc, il suffit de s'inscrire à ces trois NIB/XIBs, chacune avec sa propre réutilisation de l'identificateur. Puis
cellForRowAtIndexPath
serait, sur la base de larow
etsection
de laNSIndexPath
, résorption de l'identificateur de cellule appropriée pour le type de cellule, et puis de remplir les champs appropriés.FWIW, je pense en fait que de travail avec la cellule prototypes dans les storyboards Est un peu plus facile. Vous n'avez pas à traiter avec disparates PLUME fichiers et tout est là. Mais utiliser ce que vous êtes plus à l'aise avec.
Je suis d'accord avec vous @Rob, mais la seule raison pour laquelle je ne suis pas en utilisant des prototypes de cellules est que je dois utiliser ces mêmes cellules dans beaucoup de différents contrôleurs de vue, de sorte qu'au lieu de copier et coller et avoir beaucoup de contrôleur de code, je peux tout garder dans le modèle de cellule et ont une beaucoup plus propre contrôleur, tout en étant plus efficace.
Comme de Xcode 6.3.2., J'ai utiliser
as!
au lieu deas
dans la file d'attente.OriginalL'auteur Rob
Vous n'avez pas initialiser les cellules dans
viewDidLoad
. Vous devez vous inscrire à la XIB, pas la classe à votre table. Vous devez mettre en place le label et le champ de texte danstableView:cellForRowAtIndexPath:
(éventuellement par l'appel d'une méthode d'instance surNameInput
).OriginalL'auteur rob mayoff