J'ai plusieurs tables les cellules par défaut telles que celle avec le titre, ou celle avec l'icône à gauche et le titre à droite.
Je ne veux pas ajouter ces cellules dans le storyboard et leur attribuer un identifiant, est-ce possible de le faire?
il doit être réutilisable, je sais comment allouer de nouvelles cellules non réutilisables
J'ai essayé les réponses ci-dessous,
[self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:MyCellIdentifier];
devrait être correct, mais c'est très fastidieux et facilement oublier
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if (!cell) {
cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
}
Ce qui précède est peut-être préférable, car il regroupe tous les codes au même endroit, mais lorsque j'essaie dequeueReusableCellWithIdentifier: forIndexPath: (avec indexPath), il se bloque.
Si vous n'avez pas de cellule prototype dans votre story-board, vous pouvez utiliser le dequeueReusableCellWithIdentifier: api pour créer une cellule classique.
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if (!cell) {
cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
}
Rapide:
var cell : UITableViewCell!
cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier)
if cell == nil {
cell = UITableViewCell(style: .default, reuseIdentifier: cellIdentifier)
}
Vous pouvez supprimer une file UITableViewCell sans avoir une cellule prototype dans votre scénario. Vous devez enregistrer la cellule avec votre table pour un identifiant spécifique (chaîne). Vous feriez ça comme ça:
[self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:MyCellIdentifier];
Vous pouvez le faire dans viewDidLoad
, peut-être.
Ensuite, vous pouvez retirer de la file d'attente une cellule en utilisant cet identifiant dans votre méthode cellForRowAtIndexPath
comme d'habitude.
Modifier:
Où MyCellIdentifier
est une constante que vous avez définie quelque part, bien sûr.
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell: UITableViewCell = {
guard let cell = tableView.dequeueReusableCell(withIdentifier: "cell") else {
return UITableViewCell(style: .default, reuseIdentifier: "cell")
}
return cell
}()
cell.textLabel?.text = anyArray[indexPath.row]
return cell
}
C'est bien, parce que donner une cellule non emballée.
Vous devez essayer de retirer la cellule de la file d'attente et, si vous obtenez nil
, créez-la. Dans la cellule, le fichier xib définit son identifiant.
Définit l'identifiant de la cellule dans le fichier nib:
Obtenir une cellule réutilisable ou en fabriquer une nouvelle:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *cellIdentifier = @"myCell";
MyCell *cell = (MyCell *) [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if (cell == nil) {
NSArray *t = [[NSBundle mainBundle] loadNibNamed:@"myCellXibFileName" owner:nil options:nil];
for (id currentObject in t)
{
if ([currentObject isKindOfClass:[MyCell class]])
{
cell = (MyCell *)currentObject;
break;
}
}
}
// Do whatever you want with the cell....
return cell;
}
Ouvrez la bibliothèque de composants, faites glisser une UITableViewCell dans votre storyboard TableView et sélectionnez cette cellule pour ouvrir l'inspecteur d'identité, puis sélectionnez le style par défaut souhaité et définissez l'identificateur de cellule comme identique à l'identificateur dequeueReusableCellWithIdentifier dans votre code.