À l'aide de dequeueReusableCellWithIdentifier personnalisées de cellules
Disons que j'ai
- (UITableViewCell*)tableView:(UITableView*) cellForRowAtIndexPath:(NSIndexPath*)indexPath
{
static NSString *cellID = @"Cell Identifier";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellID];
if (!cell)
{
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellID];
cell.selectionStyle = UITableViewCellSelectionStyleNone;
}
else
{
return cell;
}
UILabel * nameLabel = [[UILabel alloc] initWithFrame: CGRectMake( 0, 15, box.size.width, 19.0f)];
nameLabel.text = name;
[nameLabel setTextColor: [UIColor colorWithRed: 79.0f/255.0f green:79.0f/255.0f blue:79.0f/255.0f alpha:1.0f]];
[nameLabel setFont: [UIFont fontWithName: @"HelveticaNeue-Bold" size: 18.0f]];
[nameLabel setBackgroundColor: [UIColor clearColor]];
nameLabel.textAlignment = NSTextAlignmentCenter;
[cell addSubview: nameLabel];
}
Qu'est-ce que cela va faire?
Si la cellule n'est pas nul, et disons que vous êtes à la ligne 5, il sera de retour la cellule de la ligne 5 avec le texte exact des étiquettes, etc?
En gros, ma question est, si vous avez personnalisé les cellules avec des étiquettes, imageviews, etc. Comment utilisez-vous cellForRowAtIndexPath
avec dequeueReusableCellWithIdentifier
?
il en est de même pour tableviewcell si il est de coutume ou pas. Vous obtenez une cale de la cellule de l'objet et de réinitialiser tous ses états, puis ajoutez votre contenu. Donc, oui, vous aurez pour nettoyer le contenu de la ou des étiquettes d'images (par la mise à zéro) et de fournir de nouveaux contenus.
Dans ce code, il n'y a aucun moyen d'accéder à nouveau à la UILabel objet, sauf par l'énumération des sous-vues de la cellule qui est assez laid. Mieux vaut utiliser une sous-classe de UITableViewCell qui a un UILabel de la propriété de sorte qu'il est facilement accessible
Dans ce code, il n'y a aucun moyen d'accéder à nouveau à la UILabel objet, sauf par l'énumération des sous-vues de la cellule qui est assez laid. Mieux vaut utiliser une sous-classe de UITableViewCell qui a un UILabel de la propriété de sorte qu'il est facilement accessible
OriginalL'auteur | 2013-07-16
Vous devez vous connecter pour publier un commentaire.
Vous tentez de retirer une cellule. Si la tentative a échoué (la cellule est nul), puis vous créez une cellule et de le configurer en vues (pas les données à l'intérieur de la vue). Par la suite, vous remplir les vues avec des données ou des paramètres de changement de cellule à cellule. Aussi, vous devez ajouter toutes les vues personnalisées à la cellule
contentView
, pas la cellule elle-même.Si vous avez un complexe de cellules, il est souvent plus facile de créer dans Interface Builder et la sous-classe UITableViewCell de sorte que vous pouvez avoir des propriétés personnalisées qui se rapportent à vos Étiquettes, Boutons, etc.
pouvez-vous appeler nameLabel.texte = nom; même si nameLabel n'est pas référencé pour quand la cellule n'est pas nul.
nameLabel sera hors de portée, hors de la
if (!cell)
. Vous devez utiliser viewWithTag pour obtenir le label.Bonne prise, fixe.
+1 pour contentView commentaire
OriginalL'auteur Andrew
Oui, dequeueing une cellule que vous avez déjà ajouté ces étiquettes devront toujours d'eux et de leur texte comme vous l'avez laissé lors de la création de cette cellule particulière.
Créer un UITableViewCell sous-classe, appelons-la MyTableViewCell qui a les propriétés de la tenue de la étiquettes/imageViews/etc qui elle aura besoin. Une fois que vous avez retiré ou alloc init ed l'un de vos MyTableViewCell, vous pouvez ensuite définir le texte/images/etc sur ces propriétés. Comme ceci:
Un problème majeur avec votre méthode est la conditions environnantes dequeueing et de la création. Dans votre méthode, vous ne configurez les cellules de l'étiquette lorsqu'elle est alloc init ed (vous instantanément retourner un retirés de la cellule, sans mise en forme). Cependant, vous voulez cet ensemble pour à la fois retiré et manuellement instancié cellules. Remarquez comment ce qui se passe dans ma méthode, l'instruction return est tout en bas. Cela permettra d'assurer que les deux créé et réutilisés, les cellules ont les données appropriées.
EDIT: Une chose importante que j'ai laissé de côté, vous permettra d'instancier les propriétés de votre cellule dans son
initWithStyle: reuseIdentifier:
méthode et les ajouter en tant que sous-vues de la cellule. C'est donc, quand vous allez à définir le texte de l'étiquette (ou autre) dans votrecellForRowAtIndexPath
méthode, il a déjà été créé. Fondamentalement, la cellule gère la création de son propre point de vue et la UITableView délégué n'a qu'à s'inquiéter sur la façon de remplir ces points de vue avec les données.OriginalL'auteur Patrick Goley
UITableView à vous demander pour le nombre de cellules. Puis c'est à la charge d'à travers - tableView:cellForRowAtIndexPath: méthode de cellules qui sera affiché + quelques défilement lisse, plus d'objets qu'il ne crée pas. Les objets créés (par l'utilisateur) stockées en vue de la table et vous pouvez accéder non utilisé par dequeueReusableCellWithIdentifier: la méthode. TableView demander à l'utilisateur de modifier en cours de création cellules lorsqu'il est de défilement. Si ici, c'est gratuit objet - le prendre à partir de dequeueReusableCellWithIdentifier: autre - créer un nouveau.
OriginalL'auteur HotJard
afin de ne pas avoir à allouer à chaque cellule du tableau, un tableau n'alloue que ce qui est nécessaire. Si seulement 8 cellules tenir sur une page, puis une vue de la table ne consacrera 8 cellules ou 9 je ne me souviens pas si elle a un rembourrage. Lorsque vous faites défiler une tableview et la cellule va sur la page de la cellule est mise en file d'attente pour être ré-utilisé, au lieu de ré-allocation d'une nouvelle cellule, la vue de la table prend un existant ce processus est appelé la résorption de l'-ing. Quand vous faites/affecter vos cellules vous donner un identifiant, cet identifiant est utilisé pour récupérer une cellule qui est marqué avec cette chaîne.
OriginalL'auteur A'sa Dickens
Vous pouvez utiliser ce
Cette option est disponible après iOS 6
Ou vous pouvez également inscrire votre classe, quelque part dans le ViewDidLoad et l'utilisation ResuseIdentifier, de sorte que vous n'avez pas à écrire le ResuseIdentifier partie dans CellForRowAtIndexpath
Espère que cela vous aide...
OriginalL'auteur Sabby