2010-04-10 9 views
12

J'essaie de personnaliser un UITableView. Jusqu'à présent, ça a l'air bien. Mais quand j'utilise une coutume UITableViewCell sous-classe, je ne reçois pas les cellules de tableau vides il y a seulement 3 cellules:Afficher le vide UITableViewCells dans UITableView personnalisé

alt text http://img193.imageshack.us/img193/2450/picture1zh.png

Utilisation du style par défaut TableView je peux obtenir les lignes vides répéter pour remplir la vue (par exemple, l'application de messagerie a ceci). J'ai essayé de définir un modèle de backgroundColor sur la UITableView au même fond de carreaux:

UIColor *color = [UIColor colorWithPatternImage:[UIImage imageNamed:@"score-cell-bg.png"]]; 
moneyTableView.backgroundColor = color; 

... mais la tuile démarre un peu avant le haut du TableView, de sorte que la tuile est éteint une fois sont fait de la cellule réelle affichage:

alt text http://img707.imageshack.us/img707/8445/picture2jyo.png

Comment puis-je personnaliser mon tableview mais toujours garder les lignes vides s'il y a moins de lignes que remplir une page?

+1

+1 C'est une bonne question qui est bien présentée. Je souhaite que tout le monde, y compris moi-même, ait pris autant de temps pour composer une bonne question. – TechZen

+0

J'essayais de formuler la même question et trouvé deux approches différentes. Comme une référence pour ceux qui sont venus ici de google, cochez [cette autre réponse] (http://stackoverflow.com/questions/14520185/ios-uitableview-displaying-empty-cells-at-the-end) qui utilise une coutume vue de pied de page. –

Répondre

9

Avez-vous par hasard enlevé la couleur de fond et le style de séparateur? Si vous l'avez fait, cela pourrait être la raison pour laquelle il n'y a pas de cellules supplémentaires. Je pense que l'UITableView par défaut n'ajoute pas vraiment plus de cellules, il a juste le style séparateur pour créer cette illusion et parce qu'il a un fond blanc, ils ressemblent à des cellules.

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone; 
} 

Si ce n'est pas le cas, vous pouvez toujours essayer d'ajouter des cellules supplémentaires qui ne peuvent pas être sélectionnés

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    return ([source count] <= 7) ? 7 : [source count]; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    static NSString *CellIdentifier = @"Cell"; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) { 
     cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; 
    } 

    // Set all labels to be blank 
    if([source count] <= 7 && indexPath.row > [source count]) { 
     cell.textLabel.text = @""; 
     cell.selectionStyle = UITableViewCellSelectionStyleNone; 
    } else { 
     cell.textLabel.text = [source objectAtIndex:indexPath.row]; 
     cell.selectionStyle = UITableViewCellSelectionStyleBlue; 
    } 

    return cell; 
} 
+0

"il a juste le style séparateur pour créer cette illusion" Vous avez tout à fait raison. Donc, je pense que je vais juste rajouter le séparateur et faire de l'image de fond deux colonnes de couleurs au lieu d'avoir le séparateur * dans * l'image de fond ... typeoneerror

+0

Nice, ça marche plutôt bien! Encore un peu de peaufinage à faire. http://img517.imageshack.us/img517/5091/picture3lt.png – typeoneerror

+1

ne devrait pas 'si ([source count] <= 7 && indexPath.row> [nombre de sources]) {' be 'if ([source count] ] <= 7 && indexPath.row> ([source count] - 1)) {'comme le chemin d'index commence à 0 alors que le compte commence à partir de 1 – Alex

0

je crois que le léger défaut d'alignement de la rangée supérieure est causée par le rebond de défilement vertical de la tableview. Si vous l'éteignez, la rangée supérieure devrait s'aligner correctement.

En outre, vous pouvez simplement renvoyer une hauteur de cellule qui englobera la mosaïque dans tableview:cellHeightForRow:. Cela fonctionne bien sur les cellules par défaut.

Questions connexes