J'ai n sections (quantité connue) et X rangées dans chaque section (quantité inconnue). Chaque ligne possède un champ UITextField. Lorsque l'utilisateur appuie sur le bouton "Terminé", je veux itérer dans chaque cellule et effectuer des tests conditionnels avec le champ UITextField. Si les tests réussissent, les données de chaque cellule sont écrites dans une base de données. Dans le cas contraire, une UIAlert est affichée. Quelle est la meilleure façon de parcourir les lignes en boucle et s'il existe une solution plus élégante, veuillez m'en informer.
Réponses
Trop de publicités?Si vous voulez seulement itérer à travers les cellules visibles, alors utilisez
NSArray *cells = [tableView visibleCells];
Si vous voulez toutes les cellules de la vue tableau, alors utilisez ceci :
NSMutableArray *cells = [[NSMutableArray alloc] init];
for (NSInteger j = 0; j < [tableView numberOfSections]; ++j)
{
for (NSInteger i = 0; i < [tableView numberOfRowsInSection:j]; ++i)
{
[cells addObject:[tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:i inSection:j]]];
}
}
Maintenant vous pouvez itérer à travers toutes les cellules :
( CustomTableViewCell est une classe, qui contient la propriété textField du type UITextField )
for (CustomTableViewCell *cell in cells)
{
UITextField *textField = [cell textField];
NSLog(@"%@"; [textField text]);
}
Réponse acceptée en swift pour les personnes qui ne connaissent pas ObjC (comme moi).
for section in 0 ..< sectionCount {
let rowCount = tableView.numberOfRowsInSection(section)
var list = [TableViewCell]()
for row in 0 ..< rowCount {
let cell = tableView.cellForRowAtIndexPath(NSIndexPath(forRow: row, inSection: section)) as! YourCell
list.append(cell)
}
}
Pour xcode 9 utilisez ceci - (similaire à @2ank3th mais le code est modifié pour swift 4) :
let totalSection = tableView.numberOfSections
for section in 0..<totalSection
{
print("section \(section)")
let totalRows = tableView.numberOfRows(inSection: section)
for row in 0..<totalRows
{
print("row \(row)")
let cell = tableView.cellForRow(at: IndexPath(row: row, section: section))
if let label = cell?.viewWithTag(2) as? UILabel
{
label.text = "Section = \(section), Row = \(row)"
}
}
}
- Réponses précédentes
- Plus de réponses