Comment bien Init personnalisé UITableviewCell?
Je suis en utilisant les 2 méthodes suivantes pour renvoyer une cellule personnalisé:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
NSString *key = [self keyForIndexPath:indexPath];
UITableViewCell *cell;
if ([key isEqualToString:DoneButtonCellKey]) {
cell = [self [self doneButtonCellForIndexPath:indexPath];
return cell;
} else {
//code to return default cell...
}
}
Alors:
- (DoneButtonCell *)doneButtonCellForIndexPath: (NSIndexPath *)indexPath {
DoneButtonCell *cell = [self.tableView dequeueReusableCellWithIdentifier:DoneButtonCellIdentifier forIndexPath:indexPath];
return cell;
}
Quelle est la bonne méthode init à utiliser avec la cellule ici afin que je puisse modifier certaines propriétés de la cellule lorsqu'il est initialisé?
EDIT: j'ai trouvé le problème, comme l'init/awakeFromNib méthodes n'ont pas été appelés pour moi. J'ai traqué l'erreur et c'était que je n'avais pas changé la "Classe Personnalisée" de UITableViewCell de ma classe personnalisée. Maintenant awakeFromNib ET initWithCoder fonctionne comme décrit ci-dessous.
- La cellule est déjà init avais à l'intérieur de la
dequeueReusablCellWithIdentiier:
Méthode, vous pouvez modifier tous les paramètres avant de vous le retourner !, ce params vous souhaitez modifier ? - J'espérais que je pourrais établir un certain nombre de choses, y compris l'étiquette de texte.numberOfLines, ou backgroundColor etc. Mais c'est tous les trucs que je ne veux pas avoir à faire à chaque fois, j'instancie une cellule.
- Je comprends que vous, alors vous devez le faire dans le
DoneButtonCell
classe, dans la awakeFromNib méthode, je vais poster une réponse pour vous montrer comment - Qui méthode init est appelée dépend de la façon dont vous créez vos cellules. Êtes-vous créer entièrement dans le code, dans un xib, ou dans un storyboard?
- Je suis à l'aide de fichiers xib. initiWithCoder, awakeFromNib, et initWithStyle ne sommes pas tous appelés
- Pour moi, j'avais une cellule de base de la classe et les classes dérivées n'étaient pas appel à [super awakeFromNib]. Le "MODIFIER" vous avez fourni dans la question d'origine d'une certaine manière m'a conduit à la solution à mon problème. Merci!
Vous devez vous connecter pour publier un commentaire.
Vous pouvez faire vos modifications à l'intérieur de la
DoneButtonCell
's de la classe, soit dans leOu la
initWithCoder:
méthode:Si vous êtes en utilisant Swift, n'oubliez pas le moyen facile de s'assurer de vue est initialisé lors de sa création est d'utiliser le didSet méthode. Par exemple, pour faire une UIImageView dans une forme ronde, vous pouvez ajouter le code comme ceci:
C'est la façon dont je suis l'initialisation personnalisée cellules
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"FileTableViewCell" owner:self options:nil];
</br>cell = [nib objectAtIndex:0];
dequeueReusableCellWithIdentifier
méthode de UITableView.nil
) utilisation[[NSBundle mainBundle] loadNibNamed:@"<#your custom cell nib name#>" owner:nil options:nil][0]
pour l'initialiser.initWithCoder:
initialiseur pour personnaliser le code d'initialisation:C'est le désigné de l'initialiseur qui est appelé quand une vue est chargé à partir d'une plume avec
loadNibNamed
, comme un tableau personnalisé de vue de la cellule.tableView.registerNib(<#nib: UINib#>, forCellReuseIdentifier: <#String#>)
Vous ne devriez pas être manuellement l'instanciation d'une plume danscellForRowAtIndex
...nil
la valeur tout en dequeueing si il a déjà enregistré une plume/classe pour la cellule. Cependant, je n'ai pas vraiment combien manuellement l'instanciation d'une plume pourrait être nocif. Pourriez-vous expliquer?registerNib
à la place?registerNib
méthode.awakeFromNib
est toujours un meilleur endroit. Je ne parle désignés initialiseur.